gpt4 book ai didi

python变量-跨模块不一致

转载 作者:行者123 更新时间:2023-11-28 17:46:58 24 4
gpt4 key购买 nike

我通过修改主模块中的全局值来切换程序模式。

更改反射(reflect)在源自该模块内部的后续函数调用中,但不会反射(reflect)在其他模块调用相同函数时。

当函数调用来自外部时,主模块是否使用旧的/外部的/重复的值?

ma​​in_module.py

import second_module

mode = 1

def print_mode():
print 'Mode: ' + str(mode)

if __name__ == "__main__":
print_mode()
mode = 2
print_mode()
second_module.problem()

second_module.py

from main_module import print_mode

def problem():
print_mode()

输出

$ python main_module.py
Mode: 1
Mode: 2
Mode: 1

最佳答案

您在命令行提供的文件作为名为 __main__ 的模块执行(__name__ == '__main__' 条件依赖于此)。模块通常只导入一次,以后的导入会提供对同一模块名称的另一个引用。

但是,这种机制是基于模块名称的。 from main_module import print_mode查找名为 main_module 的模块, 但还没有这样的模块,所以再次加载文件和一个名为 main_module 的单独模块被 build 。这需要执行来自 main_module.py 的代码再次,它再次初始化 mode = 1 , 但不符合上述条件,因此不执行任何其他操作(例如 mode = 2 )。

所以你最终得到了三个模块:__main__ , second_module , 和 main_module . __main__.mode == 2 ,但是main_module.mode == 1 , 和 second_module.print_mode is main_module.print_mode , 所以 print_mode来电second_modulemain_module.mode这是 2。

简单的出路是在 __main__ 中没有任何逻辑: 将您的入口点放在函数中 main()main_module.py , 然后创建一个单独的脚本,除了导入 main_module 之外什么都不做并调用 main_module.main() .或者,不要使用全局变量 ;-)

关于python变量-跨模块不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16759035/

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