Variable Shadowing in Python
Last Updated :
06 Mar, 2024
In this article, we will understand the concept of variable shadowing in a Python programming language. To understand this concept, we need to be well versed with the scope of a lifetime of variables in python.
Local variables:
When we define a function, we can create variables that are scoped only to that function and are not accessible outside of the function. These variables are referred to as local variables ( as they are local to the function )
Python3
def fn():
# local variable a
a = 3
print(a)
# Error, variable a referenced before
# assignment
print(a)
Hangup (SIGHUP)
Traceback (most recent call last):
File "Solution.py", line 10, in <module>
print(a)
NameError: name 'a' is not defined
Global variables
Variables are defined outside of any function and are potentially accessible anywhere in the program.
Python3
# global variable
a = 3
def fn():
# print 3
print(a)
# print 3
print(a)
fn()
Note: For more information, refer to our Global and Local Variables in Python
Variable shadowing occurs when a variable defined in the inner scope has the same name as a variable in the outer scope. Consider the example below, here the variable inside the function has the same name as a global variable. In this program, there are two versions of variable a, one which is defined globally and the other which is defined within the context of the function. Python treats these variables as completely separate variables. The global variable a is said to be shadowed by the local variable a. The way outer and inner variables with the same name are handled depends upon the name resolution rules of the language.
Python3
# global variable
a = 3
def fn():
# local variable
a = 5
print(a) # prints 5
fn()
print(a) # prints 3
How to avoid variable shadowing?
To modify a global variable, and avoid variable shadowing python provides global keyword which tells python to use the global version of the variable, instead of creating a new locally scoped variable.
Python3
# global variable
a = 3
def fn():
global a
# global variable modified
a = 5
print(a) # prints 5
print(a) # prints 3
fn() #function gets called after printing a which is 3 initially
To avoid variable shadowing at the function level, meaning if a variable in outer function has the same name as a variable in an inner function, python provides nonlocal keyword which tells python to use the variable defined in the outer function, instead of creating a new locally scoped variable
Python3
def outer():
a = 5
def inner():
nonlocal a
a = 3
print(a) # prints 3
inner()
print(a) # prints 3
outer()
Similar Reads
Python Scope of Variables In Python, variables are the containers for storing data values. Unlike other languages like C/C++/JAVA, Python is not âstatically typedâ. We do not need to declare variables before using them or declare their type. A variable is created the moment we first assign a value to it. Python Scope variabl
5 min read
Python Scope of Variables In Python, variables are the containers for storing data values. Unlike other languages like C/C++/JAVA, Python is not âstatically typedâ. We do not need to declare variables before using them or declare their type. A variable is created the moment we first assign a value to it. Python Scope variabl
5 min read
Get Variable Name As String In Python Getting a variable name as a string in Python means finding the label that points to a specific value. For example, if x = "Python", we can loop through globals() or locals() and compare values using the is operator to find that the name x points to "Python". Letâs explore some simple and effective
2 min read
Get Variable Name As String In Python Getting a variable name as a string in Python means finding the label that points to a specific value. For example, if x = "Python", we can loop through globals() or locals() and compare values using the is operator to find that the name x points to "Python". Letâs explore some simple and effective
2 min read
Unused local variable in Python A variable defined inside a function block or a looping block loses its scope outside that block is called ad local variable to that block. A local variable cannot be accessed outside the block it is defined. Example: Python3 # simple display function def func(num): # local variable a = num print(
4 min read
Python Variables In Python, variables are used to store data that can be referenced and manipulated during program execution. A variable is essentially a name that is assigned to a value. Unlike many other programming languages, Python variables do not require explicit declaration of type. The type of the variable i
6 min read