global

global 语句作用于整个当前代码块,它后面所列出的标识符将被解读为全局变量。

在 global 语句中列出的名称不得在同一代码块内该 global 语句之前的位置中使用。

当前的实现虽然并未强制要求,但在 global 语句中列出的名称不得被定义为正式形参,不也得出现于 for 循环的控制目标、class 定义、函数定义、import 语句 或 变量标注之中。

举例如下:

def f():
    a = 0
    
f() # 调用函数,对 a 赋值
a # a 是局部变量,不可访问
---------------------------------------------------------------------------

NameError                                 Traceback (most recent call last)

<ipython-input-5-251a24e05273> in <module>
      3 
      4 f() # 调用函数,对 a 赋值
----> 5 a # a 是局部变量,不可访问


NameError: name 'a' is not defined
def f():
    global a # 将 a 声明为全局变量
    a = 0
f() # 调用函数,对 a 赋值
print(a) # a 已经是全局变量
del a
0
def f():
    a = 1 # 同一代码块中,不可在 global 前使用
    global a # 将 a 声明为全局变量
    a = 0
  File "<ipython-input-9-51bc7826eb42>", line 3
    global a # 将 a 声明为全局变量
    ^
SyntaxError: name 'a' is assigned to before global declaration
a = 1 # 与 global 不在一个代码块
def f():
    global a, b # 将 a, b 声明为全局变量
    a = 0 # a 被重新赋值
    b = 1
f() # 调用函数,对 b 赋值,对 a 重新赋值
print(a,b)
del a,b
0 1