考虑以下代码:
Var='global'
def func():
Var='local'
#global Var
print Var
我尝试打印全局变量,即使我有一个同名的局部变量。 但是,当我使用关键字global时,它会给我一个错误。
有办法做到这一点吗?
我还要感谢全局给出错误的原因。
答案 0 :(得分:2)
使用内置函数globals()
。来自globals()
的文档:
返回表示当前全局符号表的字典。这始终是当前模块的字典(在函数或方法内部,这是定义它的模块,而不是调用它的模块)。
Var='global'
def func():
Var='local'
print(globals()['Var'])
回复你的评论:
首先尝试这个:
Var='global'
def func():
Var='local'
global Var
Var = 'Global'
print(Var)
func()
print(Var)
很诧异?这里发生的是Python假定在函数内的任何位置分配的任何名称都是该函数的本地名称,除非另有明确说明。如果只读取名称,并且名称不存在于本地,它将尝试在任何包含范围中查找名称(例如模块的全局范围) )。但在你的情况下,有一个名称与全局变量相同的名称。因此,它不会在任何包含范围中查找,因此最终使用局部变量。但是,当您更改 Var
的值时(由于Var
语句将global Var
变量声明为全局),Python使用全局变量,可以看到通过在全球范围内打印来修改。实际上,global
语句实际上用于修改任何本地子范围中的全局变量。见here。希望很清楚!
P.S。:我从Jeff Shannon's回答中收集了知识。