当全局变量首次被删除然后在函数中重新创建时,它是如何维持的?



我无法理解为什么当我尝试时代码没有显示任何错误

x = 2
def foo():
global x
del x
x = 3
foo()
print(x)

输出:3

我原以为del x会删除对2的引用,因此,将不会有任何全局变量,从而使对3的引用保持在本地(只能在函数内访问,不能在函数外访问(。

有人能解释一下我对global和/或del的理解有什么不正确吗?

import dis
print(dis.dis(foo))

你会看到解释的字节码

4           0 DELETE_GLOBAL            0 (x)
5           2 LOAD_CONST               1 (3)
4 STORE_GLOBAL             0 (x)
6 LOAD_CONST               0 (None)
8 RETURN_VALUE

请参阅本文:为什么Python中的del语句无法删除变量引用的数据?

如果我试图用语言解释;全局x的作用是,每当您在函数名称空间内引用x时,它都会在全局范围内查找类似的名称。

但del只是删除函数范围内的任何名称。在这种情况下,删除后,您分配x=3,这反过来又触发全局x的分配。

相关内容

最新更新