global x
不定义、声明或以其他方式创建
x
是的。它只是说如果和什么时候
十
在当前函数作用域中分配给(无论该分配是在
global
声明,因此强烈建议
全球的
语句在函数开始时使用),则赋值给该名称的全局变量,而不是局部变量。实际的创建仍然是实际任务的工作。
换一种说法,
全球的
不会自行生成任何字节码;它只是修改其他赋值语句可能生成的字节码。考虑这两个功能:
def f():
global x
x = 99
def g():
x = 99
这两个函数的字节码的唯一区别是
f
使用
STORE_GOBAL
由于
全球的
声明,而
g
使用
STORE_FAST
是的。
>>> dis.dis(f)
5 0 LOAD_CONST 1 (99)
3 STORE_GLOBAL 0 (x)
6 LOAD_CONST 0 (None)
9 RETURN_VALUE
>>> dis.dis(g)
8 0 LOAD_CONST 1 (99)
3 STORE_FAST 0 (x)
6 LOAD_CONST 0 (None)
9 RETURN_VALUE
如果你要添加一个“未使用的”
全球的
语句,例如
def h():
global xxx
x = 99
生成的字节码与
克
以下内容:
>>> dis.dis(h)
3 0 LOAD_CONST 1 (99)
2 STORE_FAST 0 (x)
4 LOAD_CONST 0 (None)
6 RETURN_VALUE