【发布时间】:2017-06-15 08:42:23
【问题描述】:
我正在努力定义一个供包中所有模块使用的全局包变量。 我有这个代码:
# 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 关键字。
编辑:建议的类似问题仅部分回答了这个问题。没有关于重新定义全局变量的问题。
【问题讨论】:
-
你为什么需要那个烂摊子?为什么不只是
GLOBAL_VAR = 'myvalue'? -
@AzatIbrakov 我希望一个变量可用于包中的所有模块,并且我不想将它作为附加参数传递给所有函数/对象。有什么建议吗?
-
你的变量来自哪里?从环境/文件/互联网/数据库?你需要读一遍吗?
-
如何创建带有全局变量的包?例如。
settings.py或globals.py。然后在你的包中做import globals并使用在那里定义的任何变量,例如globals.GLOBAL_VAR. -
我很惊讶这完全有效。首先,您有循环导入,A 导入 B 和 B 导入 A - 其次,您尝试导入一个变量,这在 python 中也无法完成。您是否尝试执行您发布的代码?
标签: python