我如何在运行时
问题描述:
我与定义一个全局变量包由包中的所有模块使用挣扎更新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没有任何关系。
答
我不知道这是做正确的方式,但是这是我如何做它的工作:
感动
GLOBAL_VAR
到一个单独的文件settings.py
消除圆形进口,由@作为建议Nearoo。在
main()
重新定义settings.GLOBAL_VAR
我想要的方式。,然后才进口
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()
为什么你会需要一个烂摊子?为什么不只是'GLOBAL_VAR ='myvalue'? –
@AzatIbrakov我想要一个变量可用于包中的所有模块和我不想将其传递到所有的功能/对象作为一个额外的参数。有什么建议么? – makeiteasy
你的变量来自哪里?从环境/文件/互联网/数据库?你需要阅读一次吗? –