更新時間:2022年10月21日15時05分 來源:傳智教育 瀏覽次數(shù):
若在函數(shù)作用域中需要修改全局作用域或外層嵌套作用域中的變量,則需要使用global和nonlocal關(guān)鍵字。接下來,分別對關(guān)鍵字global和nonlocal的作用進(jìn)行介紹。
global關(guān)鍵字用于在函數(shù)作用域中修改全局變量。假設(shè)現(xiàn)在有一個test函數(shù),其外部定義了一個全局變量a,其內(nèi)部對全局變量a進(jìn)行重新賦值,示例代碼如下:
a = 100 def test(): a += 100 print(a) test() Traceback (most recent call last): File "<stdin>", line1, in <module> File "<stdin>", line2, in test UnboundLocalError:local variable 'a' referenced before assignment
上述程序報錯,提示“在賦值前引用了局部變量a”。但是,前面我們明明是可以在函數(shù)中訪問全局變量的呀?而這里為什么會出錯呢?
這就是Python與其他語言的不同之處了。在Python中,如果在函數(shù)內(nèi)部對全局變量a進(jìn)行修改,Python會把變量a當(dāng)作是局部變量,而在進(jìn)行“a+=100”之前,我們是沒有聲明局部變量a的,因此,程序會出現(xiàn)上述錯誤提示。
要想在函數(shù)內(nèi)修改全局變量,我們可以在函數(shù)內(nèi)使用global關(guān)鍵字進(jìn)行聲明,下面,我們對程序進(jìn)行修改,示例代碼如下:
a = 100 def test(): global a a += 100 print(a) test() 200
這下,程序不但沒有報錯,而且成功對全局變量a進(jìn)行了修改。
使用nonlocal關(guān)鍵字可以在函數(shù)作用域中修改嵌套作用域中的變量。下面,帶大家看一個例子:
def func(): count = 1 def func_in(): count = 12 func_in() print(count) func() 1
上述代碼定義了一個嵌套函數(shù),其中,func為外層函數(shù),func_in為內(nèi)層函數(shù)。func函數(shù)中定義了一個變量count,func_in函數(shù)中對變量count重新賦值,并在func函數(shù)中輸出count變量的值。由執(zhí)行結(jié)果可知,內(nèi)層函數(shù)func_in并沒有對外層函數(shù)func中的變量count進(jìn)行修改。而是重新定義了一個同名的變量count。若要修改外層函數(shù)func中的變量count,則需要在變量前使用nonlocal關(guān)鍵字,改后的示例代碼如下:
def func(): count = 1 def func_in(): nonlocal count count = 12 func_in() print(count) func() 12
由執(zhí)行結(jié)果可知,內(nèi)層函數(shù)成功修改了變量的值。
注意:
使用global關(guān)鍵字修飾的變量之前可以不存在,而使用nonlocal關(guān)鍵字修飾的變量在嵌套作用域中必須已經(jīng)存在。
TiDB中有哪些組件?【TiDB架構(gòu)圖解】
2022-10-11傳智教育 x SelectDB公司 聯(lián)合推出Apache Doris中文視頻教程
2022-10-11傳智教育攜手天津經(jīng)開區(qū)人社局推動職業(yè)技能競賽廣泛開展
2022-10-11再升級!業(yè)務(wù)+技術(shù)并重,Python+大數(shù)據(jù)開發(fā)課程V3.0
2022-10-11傳智教育出席ApacheCon Asia 2022開源大會,分享大數(shù)據(jù)&Python生態(tài)在傳智教育的實踐和思考
2022-10-11科學(xué)計算庫NumPy案例:酒鬼漫步
2022-10-10