Home >Backend Development >Python Tutorial >How Can I Modify Variables in Outer Scopes within Nested Python Functions?
Modifying Variables in Outer Scopes
Encapsulating functions is a common practice in Python, but it poses challenges when accessing and modifying variables defined in outer scopes. This article explores how to modify variables that are not globally defined but exist in an enclosing scope.
Python Scope and Variable Resolution
Python follows lexical scope, meaning variables are resolved based on their location in the source code. Outer scopes (enclosing functions) can access variables defined within their nested scopes (inner functions), but the reverse is not true. Attempting to modify a variable in an outer scope without declaring it as global raises an UnboundLocalError.
Modifying Outer Scope Variables
In Python 3, the nonlocal keyword provides a solution. It allows variables to be modified within inner functions, even if they are defined in outer scopes. When a variable is declared as nonlocal, Python considers it to be bound to the outer scope.
Example:
def outer(): a = 5 def inner(): nonlocal a a += 1 print(a) outer()
Output:
6
Python 2 Workaround
For Python 2, there is no direct equivalent to nonlocal. However, it is possible to achieve the same effect using mutable objects, such as lists or dictionaries. By modifying the contents of the mutable object, the value of the variable in the outer scope can be indirectly modified.
Example:
def outer(): a = [] def inner(): a.append(1) inner() inner() print(a)
Output:
[1, 1]
By understanding Python's scope rules and using the appropriate techniques, it is possible to access and modify variables in outer, non-global scopes, facilitating encapsulation and achieving desirable program behavior.
The above is the detailed content of How Can I Modify Variables in Outer Scopes within Nested Python Functions?. For more information, please follow other related articles on the PHP Chinese website!