Python中如何让函数获取已评估变量的更新值且仅一次磁盘读
问题原因
Python 函数的默认参数仅在函数定义阶段评估一次,后续调用函数时如果不传参,会一直使用第一次绑定的值,不会随变量更新重新计算,这就是你每次调用f1拿到的arg1都是初始值10,输出一直是20的核心原因。
实现方案
你可以直接去掉函数的默认参数,在函数内部直接读取全局变量var_to_eval即可,全程只需要初始化时执行一次磁盘读,后续都从内存读取更新后的值,修改后代码如下:
import schedule import time # 仅初始执行一次磁盘读 with open ("number.txt", "r") as myfile: data = int(myfile.read()) var_to_eval = data def f1(): global var_to_eval # 直接读取内存中的全局变量,每次都是最新值 current_val = var_to_eval print(current_val + 10) new_val = current_val + 10 with open("number.txt", "w") as myfile: myfile.write(str(new_val)) # 更新内存中的全局变量 var_to_eval = new_val schedule.every(3).seconds.do(f1) while True: schedule.run_pending() time.sleep(1)
运行效果
代码执行后输出会按预期逐次递增:
20 30 40 ...
内容的提问来源于stack exchange,提问作者Lucas Schwartz
相关产品推荐
相关产品推荐

