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 about 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)
I 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 you execute the code, you'll 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
. In the global context, test
is still 0
, as you can see from the output of the program...