代码改变世界

变量作用域

2021-11-04 16:43  何小六soso  阅读(65)  评论(0编辑  收藏  举报

变量作用域

变量

局部变量

  • 函数内定义的变量称为局部变量,局部变量在函数外不可使用

全局变量

  • 在函数外定义的变量叫做全局变量,函数中可以使用,但不可以修改
  • 使用global关键之可以在函数体中定义全局变量,但使用时需要先调用函数
  • 在函数外定义的全局变量,可以使用global关键字引用到函数内部(‘global ''全局变量''')
  • globals()获取所有全局变量
  • locals() 获取当前作用域的变量

变量数据分为两种:

  • 不可变数据:在函数外部定义变量,函数内部可以使用但不可以修改
  • 可变数据:在函数外部定义变量,函数内部可以使用和修改

可变代码块

# 列表
list=[1,2,3]
def func():
    list[0]='aaa'
    print(list)
func() # 打印结果:['aaa', 2, 3]
print(list) # 打印结果['aaa', 2, 3],已经改变原有list中内容
# 运行结果
'''
['aaa', 2, 3]
['aaa', 2, 3]
'''

# 字典
vardict={'a':'a','b':'b'}
def func():
    vardict['a']='改变字典内容'
    print(vardict)   
func()
print(vardict)
'''
运行结果
{'a': '改变字典内容', 'b': 'b'}
{'a': '改变字典内容', 'b': 'b'}
'''

不可变代码块

num=10
def love():
    print(num) #在函数内可以获取函数外部的变量
    # num += 20 在函数内不可以直接更改函数外的变量
love()

函数内部定义全局变量global

def func1():
    global lovei
    lovei='aaa'
func1()# 函数内部定义的全局变量,外部使用前必须先调用方法,将全局变量加载到内存中
print(lovei)
'''
运行结果
aaa
'''

globals()、locals()获取全局变量

#locals()方法只在func()函数体中运行,所以locals的作用域只有函数体中的变量,而globals()方法无论在哪运行都会获取所有的全局的变量
def func():
    num=1
    print(locals())
    print(globals())

func()
'''
locals打印结果: {'num': 1}
globals打印结果: {'__name__': '__main__', '__doc__': '\n变量数据分为两种:\n    不可变数据:在函数外部定义变量,函数内部可以使用但不可以修改\n    可变数据:在函数外部定义变量,函数内部可以使用和修改\n\n', '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001DDB7C86CD0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'F:\\pythons\\21.变量的作用域.py', '__cached__': None, 'num': 10, 'love': <function love at 0x000001DDB7F3C790>, 'list': ['aaa', 2, 3], 'func': <function func at 0x000001DDB7F3C820>, 'vardict': {'a': '改变字典内容', 'b': 'b'}, 'func1': <function func1 at 0x000001DDB7E1D670>, 'lovei': 'aaa'}
'''


局部函数的作用域

# 局部函数的作用域
def outer():
    print('outer是外部函数。。。')
    def inner():
        print('inner是内部账号。。。')
outer() # outer是外部函数。。。
inner()# 报错
# 返回结果
	'''
	outer是外部函数。。。
	Traceback (most recent call last):
  File "F:\pythons\21.变量的作用域.py", line 76, in <module>
    inner()
NameError: name 'inner' is defined
	'''

内函数中使用外层函数的变量 nonlocal关键字

#内部函数引用外部函数中的变量
def outer1():
    print('我是外部函数')
    num2=11
    def inner1():
        nonlocal num2
        num2 +=1
        print(num2)
    inner1()
outer1() # 12
# print(num2) 程序报错,虽然内部引用但还是属于局部变量