如何使用函数重新评估 Python 中先前评估的变量?

How to use a function to re-evaluate a previously evaluated variable in Python?

我有一个名为 number.txt 的文本文件。 number.txt 的内容是一个字符串 "10",然后被读入一个名为“data”的变量中。然后创建一个新变量 "var_to_eval",然后将 data 作为其值分配给它。

我还有一个函数 "f1",它应该接收 var_to_eval 作为它的默认参数。 该函数的作用是将number.txt中包含的值加10,然后将新值保存到number.txt.

我正在使用计划库 [https://github.com/dbader/schedule][1] 重新 运行 只有功能 f1 无休止循环读取文件,将内容加10然后再次保存文件。

但是因为var_to_eval只在代码运行s时求值一次,当调度运行s函数时,从var_to_eval传入的值作为函数参数不是更新值而是初始值。

import schedule
import time

with open ("number.txt", "r") as myfile:
    data = int(myfile.read())
    var_to_eval = data
 
def f1(arg1 = var_to_eval):
    global var_to_eval
    print(arg1)    
    arg1 += 10
    with open("number.txt", "w") as myfile:
        myfile.write(str(arg1))
     
    var_to_eval = arg1
    

schedule.every(3).seconds.do(f1)

while True:
    schedule.run_pending()
    time.sleep(1)

输出:

20
20
20

我可以包括

with open ("number.txt", "r") as myfile:
    data = int(myfile.read())
    var_to_eval = data

用函数来解决这个问题,但是,我想找到一个解决方案,无论函数被“调度”重新运行多少次,读取操作都不超过一次从硬盘执行,更新数据从内存读取。

如果编码正确,代码的输出将是:

20
30
40
.
.
.

所以我想重申,接受的解决方案只能包含一个从硬盘驱动器的初始读取操作。

如果需要进一步说明才能回答问题,请提出,我会尽力进一步描述问题。

(关于schedule的使用方法请参考下面的代码片段):

导入时间表 导入时间

定义作业(): print("我在工作...")

schedule.every(3).seconds.do(工作)

虽然正确: schedule.run_pending() time.sleep(1)

f1 的默认参数只计算一次。所以每次你调用这个函数时没有更多的参数,你只是告诉它取 var_to_evaluate 的第一个值并加上 10。 你可以这样做:

def f1(arg1 = None):
    global var_to_eval
    if arg1==None:
        arg1=var_to_eval
    print(arg1)    
    arg1 += 10
    with open("number.txt", "w") as myfile:
        myfile.write(str(arg1))
 
    var_to_eval = arg1