Scope Rules in Functions
Now that we’ve stepped up to writing our own functions, we need to get a bit more formal about what names mean in Python. When you use a name in a program, Python creates, changes, or looks up the name in what is known as a namespace—a place where names live. As we’ve seen, names in Python spring into existence when they are assigned a value. Because names aren’t declared ahead of time, Python uses the assignment of a name to associate it with a particular namespace. Besides packaging code, functions add an extra namespace layer to your programs—by default, names assigned inside a function are associated with that function’s namespace, and no other.
Here’s how this works. Before you started writing functions,
all code was written at the top-level of a module, so the names
either lived in the module itself, or were built-ins that Python
predefines (e.g., open).[29]
Functions provide a nested
namespace (sometimes called
a
scope), which localizes the names they use, such
that names inside the function won’t clash with those outside
(in a module or other function). We usually say that functions define
a local scope, and modules define a
global scope. The two scopes are related as
follows:
- The enclosing module is a global scope
Each module is a global scope—a namespace where variables created (assigned) at the top level of a module file live.
- Each call to a function is a new local scope
Every time you call a function, you create a new local scope—a namespace where ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access