时间:2019-04-06 03:47:25

标签: python-3.x global-variables

将值分配给全局变量 例如:

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

1 个答案:

答案 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

希望它会有所帮助:)