在Python中,當引用一個變量的時候,對這個變量的搜索是按找本地作用域(Local)、嵌套作用域(Enclosing function locals)、全局作用域(Global)、內置作用域(builtins模塊)的順序來進行的,即所謂的LEGB規則。 即python引用變量的順序: 當前作用域局部變量->外層作用域變量->當前模塊中的全局變量->python內置變量。
然而當在一個函數內部為一個變量賦值時,并不是按照上面所說LEGB規則來首先找到變量,之后為該變量賦值。在Python中,在函數中為一個變量賦值時,有下面這樣一條規則:“當在函數中給一個變量名賦值是(而不是在一個表達式中對其進行引用),Python總是創建或改變本地作用域的變量名,除非它已經在那個函數中被聲明為全局變量. ”
python中golbal全局變量和nonlocal局部變量
global關鍵字用來在函數或其他局部作用域中使用全局變量。
gcount = 0 #定義了一個全局變量,(可以省略global關鍵字) def global_test(): print (gcount) #不修改,只是引用全局變量,不使用global關鍵字 def global_counter(): global gcount gcount +=1 #修改全局變量,需要使用global關鍵字 return gcount
輸出
1
2
3
nonlocal關鍵字用來在函數或其他作用域中使用外層(非全局)變量。
def make_counter(): count = 0 #定義一個局部變量,該局部變量作用范圍在make_counter()方法內 def counter(): nonlocal count #在方法counter()中使用外層局部變量 count count += 1 return count return counter def make_counter_test(): mc = make_counter() print(mc()) print(mc()) print(mc()) make_counter_test()
輸出
3
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com