全局变量
Python 的全局变量是模块 (module) 级别的
- 当在函数中使用变量名时,Python 依次搜索 4 个作用域
- Local(函数/类内部)
- Enclosed(外层嵌套函数/lambda内)
- Global(全局作用域)
- Built-in(内置作用域)
python默认内层作用域可以引用外层名称,但不可以改变(因为改变的话就会用到名称绑定操作),需要改变时应先使用global
关键字声明,使其指向该模块下的全局变量
tt="1"
def test1():
tt="2"
def test2():
global tt # 只会让test2函数体内的tt变为指向全局tt
tt="3"
test2() # 此处追溯到 Local tt="2"
print(tt)
print(tt)
test1()
print(tt)
# 1 2 3
变量字典
通过以下函数可以获取变量字典
- globals():该函数返回全局范围内所有变量组成的“变量字典”。
- locals():该函数返回当前局部范围内所有变量组成的“变量字典”。
- 在全局范围内调用时,有locals() == globals()
- 通过
locals()
获取的局部范围字典,即使对它修改也不会影响局部变量。但获取的全局范围字典可以修改。
- vars(object):获取在指定对象范围内所有变量组成的“变量字典”。如果不传入object 参数,vars() 和 locals() 的作用完全相同。
通过属性获取变量字典
每个模块具有__dict__
字典属性
每个函数拥有对应的 __globals__
字典属性,同其所属模块的 __dict__
字典
网友评论