巢狀函數作用域中的未綁定局部變數
在Python 中,巢狀函數存取其封閉作用域中定義的變量,從而實現程式碼重用和封裝。但是,如果變數未宣告為非本地或全域,則嘗試修改巢狀函數內封閉範圍內的變數可能會導致「UnboundLocalError」。
請考慮以下程式碼:
<code class="python">def outer(): ctr = 0 def inner(): ctr += 1</code>
當你呼叫inner()時,你會遇到“UnboundLocalError”,因為ctr沒有在inner函數中定義。要解決此問題,您可以使用以下方法:
對於Python 3 及更高版本:
使用nonlocal 關鍵字
nonlocal 關鍵字允許您從巢狀函數中修改封閉範圍內定義的變數。
<code class="python">def outer(): ctr = 0 def inner(): nonlocal ctr ctr += 1</code>
對於Python 2 及更早版本:
使用資料結構保存變數
在Python 2 中,巢狀函數無法修改封閉作用域中的變量,因此必須使用資料結構來保存變數並將其傳遞給巢狀函數。
<code class="python">def outer(): ctr = [0] def inner(): ctr[0] += 1</code>
取代所有出現的在程式碼中使用 ctr[0].
以上是Python 中的巢狀函數可以修改封閉作用域中的變數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!