Python全局变量和回调
我正在编写一个程序,它涉及从另一个模块调用的回调,并且需要访问一个全局变量。Python全局变量和回调,python,Python,我正在编写一个程序,它涉及从另一个模块调用的回调,并且需要访问一个全局变量。 似乎在回调函数中看不到分配给全局变量的更改,它只看到原始分配。我猜是因为从另一个模块导入。 编写此模式的正确方法是什么? 第一模块: # a.py from b import runb myGlobal=None def init(): global myGlobal myGlobal=1 def callback(): print myGlobal def main(): in
似乎在回调函数中看不到分配给全局变量的更改,它只看到原始分配。我猜是因为从另一个模块导入。
编写此模式的正确方法是什么?
第一模块:
# a.py
from b import runb
myGlobal=None
def init():
global myGlobal
myGlobal=1
def callback():
print myGlobal
def main():
init()
runb()
if __name__=='__main__':
main()
第二模块:
#b.py
def runb():
from a import callback
callback()
我希望这个程序打印“1”,但它打印“无”
编辑:
init只能调用一次(它是一个复杂程序的简化)将文件作为模块导入时,不会调用
main()
函数\uuu name\uuu==“main”
仅在直接执行a.py
时才为真。如果执行此操作,“从导入回调”,则再次执行“myGlobal=None”,以打印“None”Python将主模块作为\uuu main\uuu
导入。当b.py
按实际名称导入a
时,将在名称a
下加载模块的新实例。每个实例都有自己的myGlobal
一个解决方案是:
#b.py
def runb():
from __main__ import callback
callback()
另一个解决方案是创建一个新的主模块。在那里导入
a
,并显式调用a.main()
,但我确实直接运行了a.py…这不是真的,我把它与包的\uuuu init\uuuuuuuuu.py
脚本混淆了。对不起,假设a.py是主模块。我刚刚运行了:python a.pySo我可以在不进行任何初始化的情况下定义全局变量吗?这样行吗?如果是,怎么做?你知道最好避免循环依赖:@Scorpion\u God:这个链接讨论的是包之间的依赖关系,而不是模块之间的依赖关系。我知道一般情况下最好避免循环依赖,但有时替代方案不是很好。