考虑此代码:
Var='global'
def func():
Var='local'
#global Var
print Var
即使我有一个具有相同名称的局部变量,我仍在尝试打印全局变量。但是,当我使用关键字global时,它给我一个错误。
有没有办法做到这一点?
我也很高兴解释为什么global给出错误。
使用globals()
,它是内置功能。从globals()
的文档中:
返回代表当前全局符号表的字典。这始终是当前模块的字典(在函数或方法中,这是定义它的模块,而不是从中调用它的模块)。
globals()
回复您的评论:
首先尝试这个:
globals()
惊讶吗?这里发生的事情是,Python假定在函数内分配给该函数的任何变量名称都是该函数的局部变量,除非另有明确说明。如果它是仅从名称读取],并且名称在本地不存在,它将尝试在任何包含的范围(例如模块的全局范围)中查找该名称。在您的情况下,有一个局部变量Var='global'
def func():
Var='local'
print(globals()['Var'])
与全局变量Var='global'
def func():
Var='local'
global Var
Var = 'Global'
print(Var)
func()
print(Var)
同名,因此全局变量被遮盖了。由于Var
在本地存在,因此不需要在任何包含范围中查找它,因此使用了本地变量。但是,当您[[change Var
的值(使用Var
语句)时,Python使用全局变量,这可以通过在全局范围内打印Var
来看到。实际上,global Var
关键字实际上是用来从任何局部子作用域修改全局变量的。参见global Var
。希望清楚!P.S .:我从global
答案中收集了知识。