Namespace. Scope of variables#
Variables in Python have a scope. Depending on location in code where variable has been defined, scope is also defined, it determines where variable will be available.
When using variable names in a program, Python searches, creates or changes these names in the corresponding namespace each time. Namespace that is available at each moment depends on area in which code is located.
Python has a LEGB rule that it uses for variables search. For example, when accessing a variable within a function, Python searches for a variable in this order in scopes (before the first match):
L (local) - in local (within function)
E (enclosing) - in local area of outer functions (these are functions within which our function is located)
G (global) - in global (in script)
B (built-in) - in built-in (reserved Python values)
Accordingly, there are local and global variables:
local variables:
variables that are defined within function
these variables become unavailable after exit from function
global variables:
variables that are defined outside the function
these variables are ‘global’ only within a module
for example, to be available in another module they must be imported
Example of local intf_config:
In [1]: def configure_intf(intf_name, ip, mask):
...: intf_config = f'interface {intf_name}\nip address {ip} {mask}'
...: return intf_config
...:
In [2]: intf_config
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-2-5983e972fb1c> in <module>
----> 1 intf_config
NameError: name 'intf_config' is not defined
Note that intf_config variable is not available outside of function. To get the result of a function you must call a function and assign result to a variable:
In [3]: result = configure_intf('F0/0', '10.1.1.1', '255.255.255.0')
In [4]: result
Out[4]: 'interface F0/0\nip address 10.1.1.1 255.255.255.0'