當你聲明一個變量是全局變量時,它不會爲你創建它(如果它不存在的話)。全球聲明實際上對變量做了什麼?它顯然不僅僅是修改它,因爲它不需要修改它。一旦超出範圍,可以在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