存取巢狀函數作用域中的非局部變數
在Python 中,巢狀函數作用域提供對封閉作用域的訪問。但是,嘗試修改巢狀函數內封閉範圍內的變數可能會導致 UnboundLocalError。
要解決此問題,您有多種選擇:
1。使用「nonlocal」關鍵字 (Python 3 ):
對於 Python 3 及更高版本,nonlocal 關鍵字可讓您在巢狀函數中重新綁定非局部變數。
<code class="python">def outer(): ctr = 0 def inner(): nonlocal ctr ctr += 1 inner()</code>
2.透過清單間接存取(Python 2 和3):
在Python 2 和3 中,您可以使用清單來保存變數並在巢狀函數中間接遞增它。
<code class="python">ctr = [0] def inner(): ctr[0] += 1</code>
3.使用全域變數(不建議):
雖然使用全域可以允許從封閉範圍存取變量,但由於潛在的衝突和程式碼可讀性問題,通常不鼓勵這樣做。
<code class="python">def outer(): global ctr ctr = 0 def inner(): ctr += 1</code>
選擇合適的解決方案取決於您的特定 Python 版本以及程式碼的設計注意事項。
以上是如何從 Python 中的巢狀函數存取非局部變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!