在Python 中,函數內的變數通常屬於局部作用域,除非明確宣告為全域變數。但是,有時需要修改外部(封閉)但非全域範圍中定義的變數。這個問題探討如何實現這一點。
給出範例程式碼:
def A(): b = 1 def B(): # Access to 'b' is possible here. print(b) # Direct modification of 'b' fails. B() A()
函數 B 中的變數 b 駐留在非全域封閉範圍內。嘗試直接修改 b 會導致 UnboundLocalError。不能使用 global 關鍵字,因為 b 沒有在全域層級聲明。
Python 3 解:
非局部作用域(Python 3.x) 可以是用來解決此問題:
def A(): b = 1 def B(): nonlocal b # Nonlocal keyword b = 2 B() print(b) # Output: 2 A()
Python 2解決方案:
可變物件(Python 2.x):
不要直接重新分配變量,而是使用可變物件(例如列表、字典)並更改它們的值:
def A(): b = [] def B(): b.append(1) # Mutation of 'b' B() B() print(b) # Output: [1, 1] A()
以上是如何在Python中修改外部作用域中的非全域變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!