当你声明一个变量是全局变量时,它不会为你创建它(如果它不存在的话)。全球声明实际上对变量做了什么?它显然不仅仅是修改它,因为它不需要修改它。一旦超出范围,可以在Python中声明了哪些liveth全局变量但未定义全局变量?
def foo():
global cat, dog
dog = 1
foo()
print('dog' in globals()) # => True
print(dog) # => 1
print('cat' in globals()) # => False
print(cat) # => NameError
这也引发一个错误(不奇怪):
def foo():
global cat, dog
dog = 1
def bar():
cat = 2
foo()
bar()
print(dog)
print(cat) # => NameError
所以,很显然,全球仅修改函数的范围内工作的执行。这是否是由垃圾收集器造成的?是否有一些幻像的globalizer对象等待创建具有给定名称的对象,并在函数结束时被清除?
对,但在给狗分配值之前,没有狗的情况。 – Goodies
我的观点是,它显然不是直接修改狗,因为狗在全球声明之前并不存在。你不能修改不存在的东西。 – Goodies
垃圾回收器与它无关。 'global'只是不创建变量。如果你在'foo()'中的globals()'中检查'“cat”,它将会回答false。 – gdlmx