gpt4 book ai didi

python - 为什么我能够在 python 中全局化一个不存在的变量

转载 作者:太空宇宙 更新时间:2023-11-03 12:36:14 25 4
gpt4 key购买 nike

首先,我完全理解global语句的含义和使用方法。

现在,让我们看看这个:

x = 100
def f():
global x
global xxx
x = 99
return x

print(f())
# >>> 99
print(x)
# >>> 99

可以看到,通过global x,我成功的改变了全局环境中x的值。

但是xxx根本不存在,为什么我可以让它全局化,即使函数执行了也不会报错?

最佳答案

global x 不定义、声明或以其他方式创建 x。它只是说明是否以及何时在当前函数范围内将 x 赋值(赋值是在 global 语句之前还是之后,这就是为什么强烈建议global 语句用于函数的开头),赋值给同名的全局变量,而不是局部变量。实际创建仍然是实际分配的工作。

换句话说,global 本身不生成任何字节码;它只是修改其他赋值语句可能生成的字节码。考虑这两个函数:

def f():
global x
x = 99

def g():
x = 99

这两个函数在字节码上的唯一区别是 f 使用 STORE_GOBAL 作为 global 语句的结果,而 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

如果你要添加一个“未使用的”global 语句,比如在

def h():
global xxx
x = 99

生成的字节码与 g 没有区别:

>>> dis.dis(h)
3 0 LOAD_CONST 1 (99)
2 STORE_FAST 0 (x)
4 LOAD_CONST 0 (None)
6 RETURN_VALUE

关于python - 为什么我能够在 python 中全局化一个不存在的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51288447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com