我有一個迭代 8 秒的 while 回圈,其中有一個 for 回圈,它迭代 4 次,每次執行一些 pyautogui 按下功能。但是,當我的回圈中斷時,內部的 for 回圈會繼續直到完成。代碼:
import time
import pyautogui
timeout = time.time() 8
while time.time() < timeout:
for i in range(4):
pyautogui.press("1")
pyautogui.press("1")
pyautogui.press("1")
pyautogui.press("1")
pyautogui.press("1")
pyautogui.press("1")
pyautogui.press("1")
pyautogui.press("1")
pyautogui.press("1")
pyautogui.press("1")
pyautogui.press("4")
pyautogui.press("enter")
print(f"{time.time() - timeout } seconds more than while loop execute time")
列印陳述句輸出:
2.4774444103240967 seconds more than while loop execute time
那么,我怎樣才能讓我的 for 回圈以我的 while 回圈結束呢?我檢查了堆疊溢位,但一無所獲。
(使用的pyautogui.press("")原因是我使用它們時出錯了,它們的執行速度比列印陳述句慢(可以更好地看到時間差))
uj5u.com熱心網友回復:
嗯,你的描述并不反映現實。“for”回圈肯定會以“while”回圈結束,但你不能在中間打斷“for”回圈。如果您想在擊鍵中停止,那么您需要在每次擊鍵時檢查時間:
import time
import pyautogui
timeout = time.time() 8
msg = "11111111114*" * 4
for c in msg:
if time.time() >= timeout:
break
if c == '*':
c = 'enter'
pyautogui.press(c)
print(f"{time.time() - timeout } seconds more than while loop execute time")
或者:
import time
import pyautogui
timeout = time.time() 8
msg = (list("11111111114") ['enter']) * 4
while time.time() < timeout:
if msg:
pyautogui.press(msg.pop(0))
else:
time.sleep(0.1)
print(f"{time.time() - timeout } seconds more than while loop execute time")
uj5u.com熱心網友回復:
您可以while通過呼叫next適當定義的生成器來替換回圈體。在某種意義上,這是執行緒的原始實作;生成器的執行與超時條件的重復評估交錯。(實際上,這可能僅作為執行緒如何作業的示例有用。)
def my_generator():
for i in range(4):
yield pyautogui.press("1")
yield pyautogui.press("1")
yield pyautogui.press("1")
yield pyautogui.press("1")
yield pyautogui.press("1")
yield pyautogui.press("1")
yield pyautogui.press("1")
yield pyautogui.press("1")
yield pyautogui.press("1")
yield pyautogui.press("1")
yield pyautogui.press("4")
yield pyautogui.press("enter")
foo = my_generator()
while time.time() < timeout:
next(foo)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/451802.html
