我正在嘗試撰寫一個在變數更改時變為 true 的函式。腳本應該將變數放在一個串列中并檢查它是否改變。現在,我需要在另一個回圈中呼叫該函式,因此腳本在呼叫時必須執行一個 ciclefor i in range(0, 1)
無論如何該函式不起作用并且輸出總是錯誤的......有什么建議嗎?
(小白)
def change():
v1 = []
for i in range(0, 1):
v1.insert(0, get.value()) #get.value gaves a value when invoked
if len(v1) > 2:
if v1[0] != v1[1]:
v1.clear()
v1.insert(0, get.value())
return True
else:
return False
uj5u.com熱心網友回復:
你讓這變得比它需要的更難。只需存盤您知道的值并等待它改變。
def change():
v1 = get.value()
while get.value() == v1:
time.sleep(0.5)
return True
您需要在其中進行睡眠,否則這將消耗 100% 的 CPU,并且您的其他代碼將無法運行。請記住,這只適用于執行緒,這意味著它可能不是您真正需要的。
uj5u.com熱心網友回復:
您可以使用裝飾器工廠來凍結值:
from functools import partial
def frozen_args(val):
def my_decorator(wrapped_func):
return partial(wrapped_func, frozenval=val)
return my_decorator
class Get:
def __init__(self):
self.x = 1
def value(self):
return self.x
get = Get()
@frozen_args(get.value())
def change(frozenval: int) -> bool:
return get.value() != frozenval
測驗它:
>>> change()
False
>>> get.x = 3
>>> change()
True
如果您需要在測驗中重置值,請從函式定義中洗掉裝飾器,并在需要時行內使用它:
def change(frozenval: int) -> bool:
return get.value() != frozenval
>>> change_now = frozen_args(get.value())(change)
>>> get.x = 2
>>> change_now()
True
>>> change_now = frozen_args(get.value())(change)
>>> change_now()
False
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/494947.html
上一篇:在Python中,當我只更新for回圈中的變數AverageU時,為什么我的變數StartingU會更新?代碼有什么問題?
下一篇:將python變數保存到csv
