Unbound Local Variables in Nested Function Scopes
In Python, nested functions access variables defined in their enclosing scopes, enabling code reuse and encapsulation. However, attempting to modify a variable in an enclosing scope within a nested function can result in an "UnboundLocalError" if the variable is not declared as nonlocal or global.
Consider the following code:
<code class="python">def outer(): ctr = 0 def inner(): ctr += 1</code>
When you invoke inner(), you'll encounter an "UnboundLocalError" because ctr is not defined within the inner function. To fix this, you can use the following approaches:
For Python 3 and later:
Use the nonlocal Keyword
The nonlocal keyword allows you to modify variables defined in an enclosing scope from within a nested function.
<code class="python">def outer(): ctr = 0 def inner(): nonlocal ctr ctr += 1</code>
For Python 2 and earlier:
Use a Data Structure to Hold the Variable
In Python 2, nested functions cannot modify variables in enclosing scopes, so you must use a data structure to hold the variable and pass it to the nested function.
<code class="python">def outer(): ctr = [0] def inner(): ctr[0] += 1</code>
Replace all occurrences of ctr in your code with ctr[0].
The above is the detailed content of Can Nested Functions Modify Variables in Enclosing Scopes in Python?. For more information, please follow other related articles on the PHP Chinese website!