首先,要先明確 nonlocal 關鍵字是定義在閉包裡面的。請看以下程式碼:
x = 0 def outer(): x = 1 def inner(): x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x)
結果
# inner: 2 # outer: 1 # global: 0
現在,在閉包裡面加入nonlocal關鍵字進行宣告:
x = 0 def outer(): x = 1 def inner(): nonlocal x x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x)
結果
# inner: 2 # outer: 2 # global: 0
#看到差別了麼?這是一個函數裡面再巢狀了一個函數。使用 nonlocal 時,就宣告了該變數不只在巢狀函數inner()裡面
才有效,而是在整個大函數裡面都有效。
還是一樣,看一個例子:
x = 0 def outer(): x = 1 def inner(): global x x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x)
結果
# inner: 2 # outer: 1 # global: 2
global 是對整個環境下的變數起作用,而不是對函數類別的變數起作用。
以上是Python nonlocal與global關鍵字解析說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!