如何在函数中创建或使用全局变量?
如果我在一个函数中创建一个全局变量,我如何在另一个函数中使用这个全局变量? 是否需要将全局变量存储在需要其访问的函数的局部变量中?
你可以在其他函数中使用全局变量,方法是在赋值给它的每个函数中将其声明为全局变量:
globvar = 0
def set_globvar_to_one():
global globvar # Needed to modify global copy of globvar
globvar = 1
def print_globvar():
print(globvar) # No need for global declaration to read value of globvar
set_globvar_to_one()
print_globvar() # Prints 1
我想这是因为,由于全局变量不稳,Python 要通过要求全局关键字来确保程序员真正知道自己在干什么。
Python 使用一种简单的启发式方法来决定从哪个作用域加载变量,局部变量和全局变量之间的变量。 如果变量名出现在赋值的左侧,但没有引入为全局变量,则假定它是局部变量。 如果它没有出现在赋值的左侧,则假定它是全局的。
>>> import dis>>> def foo():... global bar... baz = 5... print bar... print baz... print quux... >>> dis.disassemble(foo.func_code)
3 0 LOAD_CONST 1 (5)
3 STORE_FAST 0 (baz)
4 6 LOAD_GLOBAL 0 (bar)
9 PRINT_ITEM
10 PRINT_NEWLINE
5 11 LOAD_FAST 0 (baz)
14 PRINT_ITEM
15 PRINT_NEWLINE
6 16 LOAD_GLOBAL 1 (quux)
19 PRINT_ITEM
20 PRINT_NEWLINE
21 LOAD_CONST 0 (None)
24 RETURN_VALUE >>>
看看 foo()中出现在赋值左侧的 baz 是如何成为唯一的 LOAD_FAST变量的。