Reputation: 59
Following are my files and output. All I want to do is get Value of x
after func1()
as 20
. I have already referred to this answer. I want to know why this do not work? Is it necessary to use import globalVar
instead of from globalVar import *
globalVar.py
#globalVar.py
x=10
fun1.py
from globalVar import *
def func1():
global x
x=20
print("X in fun1",x)
main.py
from fun1 import *
from globalVar import *
print("X before fun1=",x)
func1()
print("X after fun1=",x)
Output:
X before fun1= 10
X in fun1 20
X after fun1= 10
Upvotes: 2
Views: 623
Reputation: 2099
Updated Answer:
Try This:
GlobalVar.py:
global x
x = 10
fun1.py:
import GlobalVar
def func1():
GlobalVar.x = 20
print("X in fun1", GlobalVar.x)
main.py:
from fun1 import *
from GlobalVar import *
print("X before fun1=", GlobalVar.x)
func1()
print("X after fun1=", GlobalVar.x)
Check this this will give you your desired output according to your question.
Hope this will help you! Thankyou! :)
Note: The globals table dictionary is the dictionary of the current module (inside a function, this is a module where it is defined, not the module where it is called)
Upvotes: 2
Reputation: 840
The reason this does not work is that The fun1() method call in main.py doesn't return the updated value of x ie 20. which is why the scope of updated x is only in fun1 once the execution is over, the value is lost & when you print the value of x the third time it simply refers back to the global variable
Heres what you may do to make it work 1.fun1.py
from globalVar import *
def func1():
global x
x=20
print("X in fun1",x)
return x //here it returns the value of 20 to be found later
2.globalVar.py
x=10
3.main.py
from fun1 import *
print("X before fun1=",x)
x = func1()//here the updated value of x is retrived and updated, had you not done this the scope of x=20 would only be within the func1()
print("X after fun1=",x)
Upvotes: 0