Reputation: 4325
I want to make a variable global to more than 2 files so that operating in any file reflects in the file containing the variable.
what I am doing is:
b.py
import a
x = 0
def func1():
global x
x = 1
if __name__ == "__main__":
print x
func1()
print x
a.func2()
print x
a.py
import b
def func2():
print b.x
b.x = 2
I have searched for threads here and find from a import *
is making copies and import a
is otherwise. I expect the code above to print 0 1 1 2
(sure it should be in new lines) when execute python b.py
but it's showing 0 1 0 1
How does one implement that?
Upvotes: 2
Views: 11273
Reputation: 92617
Let me start by saying that I think globals like this (using the global keyword) are evil. But one way to restructure it is to put your globals into a class in a SEPARATE module to avoid circular imports.
a.py
from c import MyGlobals
def func2():
print MyGlobals.x
MyGlobals.x = 2
b.py
import a
from c import MyGlobals
def func1():
MyGlobals.x = 1
if __name__ == "__main__":
print MyGlobals.x
func1()
print MyGlobals.x
a.func2()
print MyGlobals.x
c.py
class MyGlobals(object):
x = 0
OUTPUT
$ python b.py
0
1
1
2
Upvotes: 7