在本地环境中访问全局变量
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 答案中收集了知识。
考虑这段代码:
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 答案中收集了知识。