[英]How does Python handle globals?
我在Python中遇到了一些奇怪的全局變量處理。 我希望有人可以解釋並證明這些驚喜!
A)此代碼按預期打印10:
def func():
print(a)
a = 10
func()
B)此代碼引發了一個過早引用的異常:
def func():
print(a)
a += 1
a = 10
func()
C)但是這段代碼按預期打印[10]:
def func():
print(a)
a.append(1)
a = [10]
func()
所以,我可以收集該類型a
改變其范圍,並且還沒有達到尚未改怎么還后聲明a
看到。 我知道我可以在函數的開頭使用global a
,但它相當冗長。
任何人都可以告訴我Python正在使用哪些規則來處理其奇怪的范圍?
第二個實例重新綁定 a
,因此編譯器為其生成本地訪問。 另外兩個只讀取a
,因此執行正常的全局范圍搜索。
基本上,有兩個規則:
但是,您可以更改#2的行為:
global my_module_variable
。 當您現在寫入my_module_variable
,Python將不會創建局部變量。 nonlocal my_non_local_variable
使其引用最近的封閉范圍中的變量。 B)您正在使用+=
:您正在嘗試寫入變量。 因此規則2生效,它將寫入當前范圍中的變量。 但是,它也必須從中讀取( print(a)
),但該變量還沒有值,因為您之前沒有寫過它。 Python不允許您在函數中混合規則1.
和規則2.
。
如果你想讓func()
處理a = 10
變量,你可以改變你的代碼:
>>>> def func()
global a
print(a)
a += 1
>>>> a = 10
>>>> func()
10
>>>> func()
11
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.