我无法理解为什么当我尝试时代码没有显示任何错误
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的分配。