我有一個名為 number.txt 的文本檔案。number.txt 的內容是單個字串"10",然后被讀入一個名為“data”的變數。"var_to_eval"然后創建一個新變數,data然后將其作為其值分配給它。
我還有一個函式"f1"應該var_to_eval作為它的默認引數接收。該函式的作用是將 中包含的值加 10,number.txt然后將新值保存到number.txt.
我正在使用計劃庫 [https://github.com/dbader/schedule][1]f1在無限回圈中僅重新運行該函式以讀取檔案,將 10 添加到內容然后再次保存檔案。
但是因為var_to_eval只在代碼運行時評估一次,所以當 schedule 運行函式時,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 的參考,請參閱下面的代碼片段):
匯入計劃匯入時間
def job(): print("我在作業...")
schedule.every(3).seconds.do(job)
而真:schedule.run_pending() time.sleep(1)
uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/324984.html
下一篇:所有由小于固定數的數字組成的表格
