global和nonlocal作用域

2022-09-14 23:36:24 字數 2420 閱讀 9796

python中的變數引用順序為:當前作用域區域性變數》外層作用域變數》當前模組中的全域性變數》python內建變數

global關鍵字的作用就是用來在函式或者其他區域性作用域中使用全域性變數

例如:

a=0

這裡報錯原因是因為剛開始在第一行就定義了乙個全域性變數a 而之後我們嘗試修改了這個a的值,此時系統就會認為這個a是乙個區域性變數 而因為沒有在函式中定義和賦值a 因此報錯

解決方法:

這裡 global的作用就是宣告全域性變數,宣告了之後我們就可以使用並且修改全域性變數

如果不需要修改這個全域性變數的話,那麼在區域性不宣告也是可以正常使用全域性變數的,例如:

所以綜上來講就是,當我們需要宣告且修改全域性變數時,需要使用global來宣告這個變數

nonlocal關鍵字用來在函式或者其他作用域中使用外層(非全域性)變數

def one_stage():

a=0def two_stage():

nonlocal a #呼叫了函式外層的變數

另外,global定義的變數,作用域是在區域性之外的,也就是在區域性函式中定義,但是不會改變,而是會在外部呼叫的時候顯示出來,例如:

def scope_test():

def do_local():

spam = "local spam" #此函式定義了另外的乙個spam字串變數,並且生命週期只在此函式內。此處的spam和外層的spam是兩個變數,如果寫出spam = spam + 「local spam」 會報錯

def do_nonlocal():

nonlocal spam #使用外層的spam變數

spam = "nonlocal spam"

def do_global():

global spam

spam = "global spam"

spam = "test spam"

do_local()

print("after local assignmane:", spam)

do_nonlocal()

print("after nonlocal assignment:",spam)

do_global()

print("after global assignment:",spam)

scope_test()

print("in global scope:",spam)

第乙個print函式,此時呼叫了do_local方法 但是此時do_local函式定義的spam只作用於此函式內,並沒有修改外層的spam

第二個因為使用了nonlocal,因此修改了spam

第三個雖然呼叫了global,但是因為他的作用於是在局外之外,因此並沒有在這裡(即區域性函式之內)顯示出來,所以輸出的結果還是nonlocal spam

最後乙個print則是在區域性函式之外呼叫的,因此輸出的是 global spam

除此之外需要注意的就是:

global定義的變數,只能引用,不能修改,如果需要的話,必須在函式中再宣告global

nonlocal 適用於在區域性函式 中 的區域性函式, 把最內層的區域性 變數設定成外層區域性可用,但是還不是全域性的。

global和nonlocal的用法

1 global關鍵字用來在函式或其他區域性作用域中使用全域性變數。但是如果不修改全域性變數也可以不使用global關鍵字,global適用於函式內部修改全域性變數的值 2 nonlocal關鍵字用來在函式或其他作用域中使用外層 非全域性 變數。nonlocal適用於巢狀函式中內部函式修改外部變數的...

函式中的global和nonlocal

區域性作用域對全域性作用域的變數 此變數只能是不可變的資料型別 只能進行引用,而不能進行改變,只要改變就會報錯,但是有些時候,我們程式中會遇到區域性作用域去改變全域性作用域的一些變數的需求,這怎麼做呢?這就得用到關鍵字global global第乙個功能 在區域性作用域中可以更改全域性作用域的變數。...

global和 nonlocal關鍵字

例如 def handu global a 利用外邊的a執行函式 a 10 print 函式內部 a a 20 handu print 外部函式 a 結果 函式內部 30 函式外部 30 開始分析 global關鍵字可以將區域性變數變成乙個全域性變數所以都是30 30 def hanfu globa...