在函数中使用全局变量

如何在函数中创建或使用全局变量?
如果我在一个函数中创建一个全局变量,我如何在另一个函数中使用这个全局变量? 是否需要将全局变量存储在需要其访问的函数的局部变量中?

你可以在其他函数中使用全局变量,方法是在赋值给它的每个函数中将其声明为全局变量:

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变量的。