将值分配给全局变量 例如:
test1.py:
global var
var= 0
def func1():
print("The updated value of var is :"+var)
#after the updated value perform some operation on var
var=var*2
def func3():
global var
print("The final value of var is :"+var)
test2.py:
from test1 import *
def func2():
global var
print("The initial value of var is :"+var)
var = 2+3
func1()
我打算使用以下var值:
test2.py的func1中var的初始val:0
test1.py的func2中var的更新值:5
test1.py的func3中var的最终值:10
答案 0 :(得分:0)
我在您的代码中注意到的第一件事是
global var
在第一行。在python中,这是不需要的。在全局范围内声明的任何变量都将自动变为全局变量。您只需要在想要修改全局变量的函数内部使用global关键字。
您需要了解的关于Python的另一件事是,全局var仅对于该特定文件是全局的。它不会转移到其他模块。
所以现在:您如何做您想做的事情。
我认为在模块之间保持这种状态的唯一真实方法是使用某种容器。会使用一个类,但我确定像字典或列表这样的东西会很好用。这样,您也不会过多地破坏全局范围,可以对一个容器中的多个变量执行此操作,并且不需要全局关键字。之所以如此,是因为通过从test2导入test1,您将在再次执行整个test1模块时将var再次设置为0。通过将此共享容器放在从test1和test2导入的第三个模块中来解决。我称这个模块为“共享”。代码如下:
test1.py:
from test2 import func2
from shared import SharedContainer
def func1():
print("The updated value of var is: {}".format(SharedContainer.var))
# after the updated value perform some operation on var
SharedContainer.var = SharedContainer.var*2
def func3():
print("The final value of var is: {}".format(SharedContainer.var))
if __name__ == "__main__":
func2()
func3()
test2.py
from shared import SharedContainer
def func2():
from test1 import func1
print("The initial value of var is: {}".format(SharedContainer.var))
SharedContainer.var = 2+3
func1()
shared.py
class SharedContainer:
var = 0
希望它会有所帮助:)