nonlocal Scope in Python with Example
In Python, we can define function within function which is called nested function. When we create nested function then there will be some scopes which are neither local nor global. Such scopes are known as nonlocal scopes in Python.
This article explains nonlocal scope in Python with example.
To understand the concept of nonlocal scope consider a following python program:
Program
a = 20
def outer_function():
b = 30
# Printing from non-local scope
print('Outer: a = %d and b=%d' %(a,b))
def inner_function():
c = 40
# printing from local scope
print('Inner: a = %d, b=%d and c = %d' %(a,b,c))
inner_function()
# printing from global scope
print('Global: a = %d' %(a))
# function call
outer_function()
Output
Global: a = 20 Outer: a = 20 and b=30 Inner: a = 20, b=30 and c = 40
Explanation
In this example, both functions outer_function
and inner_function
have access to the global and built-in scopes as well as their respective local scopes.
But inner_function
has access to its enclosing scope i.e. scope of outer_function
and this scope is neither global nor local and hence it is known as nonlocal scope.
In this example inner_function
can access global variable a, nonlocal variable b and local variable c.
Here variable b is nonlocal for inner_function
but local for outer_function
.