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