There are four types of scope in Python, and they are arranged in a hierarchy. Each scope is a context in which names are stored and in which they can be looked up. The four scopes from narrowest to broadest are:
-
Local - names defined inside the current function.
-
Enclosing - names defined inside any and all enclosing functions. (This scope
isn't important for the contents of this book.) -
Global - names defined at the top-level of a module. Each module brings with
it a new global scope. -
Built-in - names built-in to the Python language through the special
builtins module.
Together, these scopes comprise the LEGB rule:
The LEGB Rule
Names are looked up in the narrowest relevant context.
It's important to note that scopes in Python do not, in general, correspond to the source-code blocks as demarcated by indentation. For-loops, with-blocks, and the like do not introduce new nested scopes.