在本地环境中访问全局变量

时间:2016-02-02 16:07:06

标签: python scope global-variables global local-variables

考虑以下代码:

Var='global'
def func():
     Var='local'
     #global Var
     print Var

我尝试打印全局变量,即使我有一个同名的局部变量。 但是,当我使用关键字global时,它会给我一个错误。

有办法做到这一点吗?

我还要感谢全局给出错误的原因。

1 个答案:

答案 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回答中收集了知识。