如何使用函数重新评估 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
我有一个名为 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