修改外部作用域中的變數
封裝函數是Python 中的常見做法,但在存取和修改外部作用域中定義的變數時會帶來挑戰範圍。本文探討如何修改未全域定義但存在於封閉作用域中的變數。
Python 作用域和變數解析
Python 遵循詞法作用域,這表示變數是根據它們在原始程式碼中的位置來解決。外部作用域(封閉函數)可以存取在其巢狀作用域(內部函數)內定義的變量,但反之則不然。嘗試修改外部作用域中的變數而不將其宣告為全域變數會引發 UnboundLocalError。
修改外部作用域變數
在 Python 3 中,nonlocal 關鍵字提供了一個解。它允許在內部函數內修改變量,即使它們是在外部作用域中定義的。當變數被宣告為非局部變數時,Python 認為它綁定到外部作用域。
範例:
def outer(): a = 5 def inner(): nonlocal a a += 1 print(a) outer()
輸出:
6
Python 2 解法
對於Python 2,對於沒有直接
def outer(): a = [] def inner(): a.append(1) inner() inner() print(a)範例:
[1, 1]輸出:透過理解Python的作用域規則並使用適當的技術,可以存取和修改外部非全局作用域中的變量,從而促進封裝並實現理想的效果程序行為。
以上是如何修改巢狀 Python 函數內外在作用域中的變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!