gpt4 book ai didi

Python 全局变量和回调

转载 作者:行者123 更新时间:2023-11-28 20:45:20 25 4
gpt4 key购买 nike

我正在编写一个程序,该程序涉及从另一个模块调用的回调,并且需要访问全局变量。
似乎在回调函数中看不到分配给全局变量的更改,它只看到原始分配。我猜是由于从其他模块导入。
编写此模式的正确方法是什么?

第一个模块:

# 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只能调用一次(它是一个复杂程序的简化)

最佳答案

Python 将主模块导入为 __main__。当 b.py 按其实际名称导入 a 时,模块的新实例将以名称 a 加载。每个实例都有自己的 myGlobal

一个解决方案是这样的:

#b.py
def runb():
from __main__ import callback
callback()

另一种解决方案是创建一个新的主模块。在那里导入 a 并显式调用 a.main()

关于Python 全局变量和回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23738349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com