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

Accessing global variable in local environment

考虑这段代码:

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

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

有办法吗?

我也希望能解释为什么 global 会出错。

使用globals() which is a built-in function. From documentation for globals():

Return a dictionary representing the current global symbol table. This is always the dictionary of the current module (inside a function or method, this is the module where it is defined, not the module from which it is called).

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,因此全局变量被隐藏。由于 Var 存在于本地,因此不需要在任何包含范围中查找它,因此使用了局部变量。但是,当你更改Var的值(使用global Var语句)Python使用全局变量,可以通过打印global Var 在全局范围内。事实上,global 关键字实际上用于从任何局部子作用域修改全局变量。参见 here。希望清楚!

P.S.: 我从 Jeff Shannon's 答案中收集了知识。