Creating and Accessing Global Variable
The declaration of a global variable will be outside all the blocks of the program.
For example:
x = "CodingNinjas"
def main():
print("x inside:", x)
#calling main function
main()
print("x outside:", x)
Output:
x inside: CodingNinjas
x outside: CodingNinjas
Note: x is the global variable in the above Python code.
What gives us such confidence?
- To output the value of x within the main, we created a main() function.
- After that, the print statement outside the main will output the value of x.
- And they both produce exactly the same results.
Thus, x is a global variable because its value is independent of any function and can be used anywhere in the code.
So now we know how to create global variables in Python but What if we want to modify the value of a global variable in Python?
You can also read about, Fibonacci Series in Python, and Convert String to List Python
Modify Global variables in Python
a = 15
print("value before modification",a)
#modify a global value
def modify():
#let's change the global variable a
a = a*2
print("after modification, value in function",a)
modify()
print("after modification, value outside the function",a)

You can also try this code with Online Python Compiler
Run Code
Output:
value before modification 15
Traceback (most recent call last):
File "main.py", line 9, in <module>
modify()
File "main.py", line 6, in modify
a = a*2
UnboundLocalError: local variable 'a' referenced before assignment

You can also try this code with Online Python Compiler
Run Code
Here, the value before modification will be printed as 15 but since we tried to modify the value of a global variable inside the function it will give an error because the same-named variable ‘a’ acts like a local variable to that function and so we can’t do the modification this way.
So, now for modification, we will here use the global keyword in python as-.
a = 15
print("value of 'a' before modifying=",a)
#modify a global value
def modify():
#make the use of a global keyword to change the value actually
global a
a=5
print("after modification,value of'a'in function=",a)
modify()
print("after modification,value of 'a'outside the function=",a)

You can also try this code with Online Python Compiler
Run Code
Output:
value of 'a' before modifying= 15
after modification,value of'a'in function= 5
after modification,value of 'a'outside the function= 5

You can also try this code with Online Python Compiler
Run CodeFrom the output, it is clear that now the value is modified, and so, for modifying the value of a global variable outside the context of a particular function, we use the global keyword in python.
Python Local Variables
Above while modifying the global variable without using the global keyword, you must have encountered the word “local variable”. What does it mean by local?
Something whose scope is restricted to a particular scope is local and so are local variables.
- Local variables have a local scope that is restricted to a particular block in which they are declared.
- They are basically declared within the definition of a particular function.
- They cannot be accessed outside the block in which they are declared.
You can also read about the Multilevel Inheritance in Python, Swapcase in Python
Also see, Python Operator Precedence
Creating and Accessing local variable:
Whatever variables we use in a function are local to that function. So, we declare the local variable in the block where we want to use it, i.e., within the boundary of that function, and thus, its scope gets finished within that block only.
def fun1():
x=18
print("Value of 'x' is local to fun1() and x=",x)
def fun2():
y=20
print("Value of 'y' is local to fun2() and y=",y)
fun1()
fun2()

You can also try this code with Online Python Compiler
Run Code
Output:
Value of 'x' is local to fun1() and x=18
Value of 'y' is local to fun2() and y=20

You can also try this code with Online Python Compiler
Run Code
Try to access ‘x’ in fun1() and ‘y’ in fun2()-
def fun1():
x=18;
print("Value of 'y' is",y)
def fun2():
y=20;
print("Value of 'x' is",x)
fun1()
fun2()

You can also try this code with Online Python Compiler
Run Code
So, what do you think is going to happen?
Here you will get an error as-
Output:
Traceback (most recent call last):
File "main.py", line 7, in <module>
fun1()
File "main.py", line 3, in fun1
print("Value of 'y' is",y)
NameError: name 'y' is not defined

You can also try this code with Online Python Compiler
Run Code
Note: From the above error, it’s clear that a local variable can only be accessed within its scope.
Modifying local variables in Python
Modifying local variables in Python is an easy-peasy task, as shown below:
def fun1():
#scope of x is local to fun1
x=18
print("Value of 'x' before modification is=",x)
#try to modify x
x=x+20
print("Value of 'x' after modification is=",x)
fun1()

You can also try this code with Online Python Compiler
Run Code
Output:
Value of 'x' before modification is= 18
Value of 'x' after modification is= 38

You can also try this code with Online Python Compiler
Run Code
The concept of global and local variables should now be clear to you.
So, just wonder what would happen if there is a local as well as a global variable of the same name in the same program?
#declaring a global variable
p =8;
def fun():
#local variable with the same name as global variable
p=18;
print("value of p=",p)
fun()

You can also try this code with Online Python Compiler
Run Code
Output:
value of p= 18

You can also try this code with Online Python Compiler
Run CodeHence, when a local variable and global variable have the same name, the priority is given to a local variable of that function, which only gets printed.
You can practice by yourself with the help of online python compiler.
Python Non-local variable
- The concept of non-local variables is only used by python.
- It is used where there are nested functions and if we want the variable of the inside function to be non-local.
What exactly does it mean when I say "nested functions"?
A nested function, in general, is a collection of functions declared within another function.
# Python program to illustrate
# nested functions
def outerFunction(num):
number=num
def innerFunction():
print(number)
innerFunction()
outerFunction(10)

You can also try this code with Online Python Compiler
Run Code
Output:
10

You can also try this code with Online Python Compiler
Run Code
- innerFunction() is an inner function in the example above because it is declared inside outerFunction().
- innerFunction() can only be called after outerFunction() has been called (). After that, outerFunction() will call innerFunction(), which is defined inside it.
- It is important to call the outer function in order for the inner function to run.
Now let’s try to change the number variable to number=number+10
The reason behind changing it, the moment you write number=number+10
and run the code, you will receive an UnboundLocalError as shown below.
# Python program to illustrate
#scope of local variables
def outerFunction(num):
number=num
def innerFunction():
#update number inside innerFunction
number=number+10
print(number)
innerFunction()
outerFunction(10)

You can also try this code with Online Python Compiler
Run Code
Output:
Traceback (most recent call last):
File "main.py", line 14, in <module>
outerFunction(10)
File "main.py", line 12, in outerFunction
innerFunction()
File "main.py", line 8, in innerFunction
number=number+10
UnboundLocalError: local variable 'number' referenced before assignment

You can also try this code with Online Python Compiler
Run Code
Intuitively, If you move it to a global variable by saying global number, you will get a new problem called NameError.
# Python program to illustrate
#scope of local variables
def outerFunction(num):
number=num
def innerFunction():
#trying to make it global
global number
#update number inside innerFunction
number=number+10
print(number)
innerFunction()
outerFunction(10)

You can also try this code with Online Python Compiler
Run Code
Output:
Traceback (most recent call last):
File "main.py", line 17, in <module>
outerFunction(10)
File "main.py", line 15, in outerFunction
innerFunction()
File "main.py", line 11, in innerFunction
number=number+10
NameError: name 'number' is not defined

You can also try this code with Online Python Compiler
Run Code
Definitely, you'll be confused and unsure of what to do next.
Non-local variables enter the picture now.
Re-reading the definition, we can infer that a nonlocal variable must be used if a nested function is present.
Now let’s see the way to create a nonlocal variable and access it.
Creating and Accessing Non-local Variable
Non-local keyword is used to declare a non-local variable.
def outerFunction():
#x is a local variable to outerFunction()
x =5
print("value of 'x' in outerFunction=",x)
def innerFunction():
#x is nonlocal to innerFunction()
nonlocal x
x=6
print("value of 'x' in innerFunction=",x)
innerFunction()
outerFunction()

You can also try this code with Online Python Compiler
Run Code
Output:
value of 'x' in outerFunction= 5
value of 'x' in innerFunction= 6

You can also try this code with Online Python Compiler
Run CodeLet’s see if we can modify the non-local variable or not. We will check it by doing some modifications to the earlier code
Modifying Non-local variable in Python
def outerFunction():
#x is a local variable to outerFunction()
x =5
print("value of 'x' in outerFunction=",x)
def innerFunction():
#x is nonlocal to innerFunction()
nonlocal x
x=6
print("value of 'x' in innerFunction=",x)
#let's modify x
x=x+10
innerFunction()
return x
print("x changed to",outerFunction())

You can also try this code with Online Python Compiler
Run Code
Output:
value of 'x' in outerFunction= 5
value of 'x' in innerFunction= 6
x changed to 16

You can also try this code with Online Python Compiler
Run CodeWhat happened here? Just think of it.
We make changes to the non-local variable that was within the inner function, but the result we obtain was basically from the outer function and the value of ‘x’ is even modified here as it should be x=5 through outside function but since the variable was non-local it’s changing is made for the ‘x’ of outside function as well.
Now that we've covered “Global, Local and Nonlocal Variables in Python”, let's move on to some frequently asked questions about them.
If you have any further questions, please leave them in the comments below; we'd be happy to answer them.
Frequently Asked Questions
What are local and global variables in python?
Local variables are those variables that are declared and used within a particular block or function whereas, global variables are the variables with global scope and can be used either inside or outside any function.
What is a non-local variable in python?
A non-local variable is a variable used when there are nested functions, and we don’t want the variable of the inside function to be local within that function.
Can we modify a global variable in python?
Yes, we can modify a global variable in python using the ‘global’ keyword in the context of the function in which we want the modification to be done.
How can I declare a non-local variable?
A non-local variable can be declared using the ‘nonlocal’ keyword in python.
Is it ok to use global variables in python?
Not exactly, as python considers a variable to be local if not declared as global, and this creates trouble specifically when you want to modify a global variable in python.
Conclusion
In this article, we have tried to clarify the difference between “Global, Local and Nonlocal Variables in Python”.
In general, we are well aware of local variables, but it is necessary to know the actual concepts of all three of the variables.
After covering “Global, Local and Nonlocal Variables in Python”, don’t leave it here only and go through our Guided Path to cover all the Basics in Python and increase your problem solving skills to fuel up your ride towards cracking your dream job.
Keep learning, keep growing!