Python如何从b.py的函数中访问a.py内被追加修改后的var变量
问题根本原因
- 最核心的误区:Python运行时修改的变量只存在于当前进程的内存中,不会自动改写源代码文件的内容。你运行a.py时更新的
var,在a.py进程退出后就消失了,a.py文件里的var = []不会有任何变化,后续b.py导入a.py时自然只能读到初始的空列表。 - 如果你是分开开两个终端分别运行a.py和b.py,两个进程的内存完全独立,数据不可能互通,这也是你拿不到更新后值的最常见原因。
- 如果是在同一个进程里运行逻辑,重复导入模块不会生效:Python会缓存所有已经导入过的模块,不管你写多少次
import a,都只会第一次导入时执行一次a.py的代码,后续导入都是直接读缓存,不会重新加载更新后的变量值。
新手友好解决方案
不用类,两种场景按需选即可:
场景1:a处理完数据后,b单独运行也能拿到结果
用本地文件做中间存储,a处理完数据后把var的内容存到文件里,b读文件拿数据即可,示例:
# a.py的retrieve_path函数末尾加这几行 import json with open("data_cache.json", "w", encoding="utf-8") as f: json.dump(var, f)
# b.py要拿数据的时候直接读文件 import json def a_function(): with open("data_cache.json", "r", encoding="utf-8") as f: current_var = json.load(f) print(current_var)
场景2:a和b的逻辑在同一个流程里执行
不要分开跑两个脚本,统一用一个启动入口:
- 新建
main.py作为唯一启动文件:
import a import b # 先执行a的逻辑更新var a.run() # 再调用b的函数,直接取a.var就能拿到更新后的值 b.a_function()
- 调整b.py的写法,不要在顶部提前导入
var,用的时候直接取模块的属性即可:
# b.py import a def a_function(): print(a.var)
之后直接运行python main.py即可,所有逻辑在同一个进程里运行,就能正常拿到更新后的变量。
内容的提问来源于stack exchange,提问作者Florea Constantin Cristian
相关产品推荐
相关产品推荐

