Home >Backend Development >Python Tutorial >Can Nested Functions Modify Variables in Enclosing Scopes in Python?
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!