\(\newcommand{L}[1]{\| #1 \|}\newcommand{VL}[1]{\L{ \vec{#1} }}\newcommand{R}[1]{\operatorname{Re}\,(#1)}\newcommand{I}[1]{\operatorname{Im}\, (#1)}\)

Global and local scope of Python variables

See: variables and scope in the online Python textbook.

The scope of a variable refers to the places that you can see or access a variable.

If you define a variable at the top level of your script or module or notebook, this is a global variable:

>>> my_var = 3

The variable is global because any Python function or class defined in this module or notebook, is able to access this variable. For example:

>>> def my_first_func():
...     # my_func can 'see' the global variable
...     print('I see "my_var" = ', my_var, ' from "my_first_func"')
>>> my_first_func()
I see "my_var" =  3  from "my_first_func"

Variables defined inside a function or class, are not global. Only the function or class can see the variable:

>>> def my_second_func():
...     a = 10
...     print('I see "a" = ', a, 'from "my_second_func"')
>>> my_second_func()
I see "a" =  10 from "my_second_func"

But here, down in the top (global) level of the notebook, we can’t see that variable:

>>> a
Traceback (most recent call last):
  ...
NameError: name 'a' is not defined

The variable a is therefore said to be local to the function. Put another way, the variable a has local scope. Conversely the variable my_var has global scope.

The full rules on variable scope cover many more cases than these simple examples.

See this notebook on variable scope by Sebastian Raschka for a nice walkthrough.