Global variables scope in modules

2019-05-20 17:21发布

问题:

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

回答1:

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)



回答2:

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)