我创建了一个像这样的函数:
import time
def func(seconds):
time.sleep(seconds)
print(f'waited {seconds} seconds')
现在,如果我这样创建while loop
并调用func(6)
,则6秒钟后,它将打印waited 6 seconds
:
start_time = time.time()
while time.time() - start_time < 5:
func(6)
output:
waited 6 seconds
但是,如果我创建相同的while loop
,同时调用func(4)
,则脚本将等待4秒钟,然后打印waited 4 seconds
,并在4秒钟后,它将打印waited 4 seconds
再次!
start_time = time.time()
while time.time() - start_time < 5:
func(4)
output:
waited 4 seconds
waited 4 seconds
为什么会这样?
我了解为什么func(6)
会这样,但是我希望func(4)
仅执行一次,因此只打印一次waited 4 seconds
。
答案 0 :(得分:2)
while条件检查是否已过去五秒钟。对于func(6)
,“ 6秒> 5秒”,因此条件得到满足,并结束了while循环。当func(4)
返回时,条件是“ 4秒> 5秒”不是True,因此while循环将再次迭代。
答案 1 :(得分:1)
会发生什么:
start_time = time.time() # captures the time right now()
while time.time() - start_time < 5: # 1.) checks the time right after last check
# 3.) checks the time right after 6s passed
func(6) # 2.) waits 6 seconds
# 4.) done
使用4s时:
start_time = time.time() # captures the time right now()
while time.time() - start_time < 5: # 1.) checks the time right after last check
# 3.) checks the time right after 4s passed, still < 5
# (should be something along 4.00023 or so)
# 5.) checks the time afte4 4+4s passed
func(4) # 2.) waits 4 seconds
# 4.) waits 4 more seconds
# 6.) done
减去时间可让您浮动:
import time
t = time.time()
time.sleep(1) # guaranteed to wait at least 1s
print(time.time()-t)
输出:
1.00106596947
在time.sleep(4)
之后,您仍然远离5-这是它两次进入循环的原因。
答案 2 :(得分:0)
针对时间增量计算的while条件(<5)将允许while循环在4秒钟的睡眠后再次进入while循环,例如,新的时间增量可能是在第一次4秒钟的睡眠后为4.0022xxx,因为条件(4.0022) xx <5)为True,它将导致第二个4秒钟的睡眠。