2017-06-15 75 views
-1

我与定义一个全局变量包由包中的所有模块使用挣扎更新Python中的全局包变量。 我有这样的代码:我如何在运行时

# my_module.py 
from .__main__ import GLOBAL_VAR 

def print_global(): 
    print(GLOBAL_VAR) 


# __main__.py 
from my_package import my_module 
GLOBAL_VAR = '' 

def main(): 
    global GLOBAL_VAR 
    GLOBAL_VAR = 'myvalue' 
    my_module.print_global() 

if __name__ == '__main__': 
    main() 

我希望my_module.print_global()打印myvalue,而是它打印一个空字符串(初始值)。 我也试过在main()导入模块后GLOBAL_VAR的声明,但是它并没有帮助。

您能否告诉我如何从main()重新定义GOBAL_VAR并使其可用于包装中的所有子模块?我还会接受任何其他选项,而不是使用global关键字。

编辑:建议的类似的问题只是部分地回答了这一个。关于redefinig globals没有任何关系。

+0

为什么你会需要一个烂摊子?为什么不只是'GLOBAL_VAR ='myvalue'? –

+0

@AzatIbrakov我想要一个变量可用于包中的所有模块和我不想将其传递到所有的功能/对象作为一个额外的参数。有什么建议么? – makeiteasy

+0

你的变量来自哪里?从环境/文件/互联网/数据库?你需要阅读一次吗? –

回答

0

我不知道这是做正确的方式,但是这是我如何做它的工作:

  1. 感动GLOBAL_VAR到一个单独的文件settings.py消除圆形进口,由@作为建议Nearoo。

  2. main()重新定义settings.GLOBAL_VAR我想要的方式。

  3. ,然后才进口my_module

同样,这里的问题是,我不知道最初的变量值,并在运行时将其定义到所有模块时需要使用。

这就是现在的代码的样子:

# settings.py 
GLOBAL_VAR = '' 


# my_module.py 
from .settings import GLOBAL_VAR 

def print_global(): 
    print(GLOBAL_VAR) 


# __main__.py 
from my_package import settings 

def main(): 
    settings.GLOBAL_VAR = 'myvalue' 

    from my_package import my_module 
    my_module.print_global() 

if __name__ == '__main__': 
    main()