Scopes and name resolution
Do you remember when we talked about scopes and namespaces in Chapter 1, A Gentle Introduction to Python? We're going to expand on that concept now. Finally, we can talk in terms of functions, and this will make everything easier to understand. Let's start with a very simple example:
# scoping.level.1.py
def my_function():
test = 1 # this is defined in the local scope of the function
print('my_function:', test)
test = 0 # this is defined in the global scope
my_function()
print('global:', test)
We have defined the test
name in two different places in the previous example—it is actually in two different scopes. One is the global scope (test = 0
), and the other is the local scope of the my_function()
function (test = 1
). If we execute the code, we will see this:
$ python scoping.level.1.py
my_function: 1
global: 0
It's clear that test = 1
shadows the test = 0
assignment in my_function...