Course Content
Mastering Python: Closures and Decorators
Mastering Python: Closures and Decorators
Non-local Scope
The non-local scopes are outer local scopes. This means that the non-local scope is placed between global scope and function local scope:
Let's look at the code example:
def first_outer(): first = "first_outer() local scope" def second_outer(): second = "second_outer() local scope" def inner(): third = "inner() local scope" print("Inner non-local:", first) print("Inner non-local:", second) print("Inner local:", third) inner() second_outer() first_outer()
The first_outer()
local and second_outer()
local scope are non-local scopes for the inner()
function.
Access to change non-local objects
You can change the non-local variable or another object using the nonlocal
keyword (similar to the global
keyword):
def outer(): some_variable = 255 def inner(): nonlocal some_variable print(some_variable) some_variable += 233 print(some_variable) inner() outer()
Note
Why pay attention to non-local scope?
The non-local scope is used for the closure. That's why non-local scope is also named enclosing scope. The closure will be described in the next section.
Thanks for your feedback!