我需要在超时前检查一定的条件。如果在限制之前满足条件,则返回True,否则返回False。
我是按照以下方式做到这一点的
counter = 1
condition_met = False
while counter < max_limit:
if <conditions are met>:
condition_met = True
break
time.sleep(10)
counter += 1
return condition_met
我想知道是否有更多的pythonic方式来做同样的事情。
提前感谢您的反馈
时间的一个非常好的方法是使用-shysxswpoi模块:shock
time
看到?该模块不仅仅适用于import time
def foo():
max_limit = 25 # Seconds.
start = time.time()
condition_met = False
while time.time() - start < max_limit:
if <conditions are met>:
condition_met = True
break
time.sleep(10)
return condition_met
ing。 sleep
如果它不是;¬)
,你的循环将等同于
time.sleep
这相当于for _ in range(max_limit):
if <condition>:
return True
# time.sleep(10)
return False
。
因此,您可以(ab)使用return any(<condition> for _ in range(max_limit)
和any
检查条件是否在每次检查之前等待一段时间达到一定次数:
or
这将首先评估返回any(time.sleep(10) or <condition> for _ in range(max_limit))
的time.sleep
,然后评估条件,直到满足条件或None
耗尽。
唯一需要注意的是,这将在第一次检查病情之前调用range
。要解决此问题,您可以先检查计数器变量,只有当time.sleep
调用> 0
时:
time.sleep
这是否比长循环更清晰是由你来决定的。
正如any(i and time.sleep(10) or <condition> for i in range(10))
建议的那样,事实上你可以将上面的in comments条款反转为
any
这将首先检查条件,只有条件为假将any(<condition> or time.sleep(10) for _ in range(max_limit))
。它也比上述两种appraoches更自然地准备好了。
我假设你在函数中有一个代码。下面的代码摆脱了变量sleep
和condition_met
语句。
break