Если бы не time.sleep
, ваш цикл был бы эквивалентен
for _ in range(max_limit):
if <condition>:
return True
# time.sleep(10)
return False
, что эквивалентно return any(<condition> for _ in range(max_limit)
.
Таким образом, вы могли бы (ab) использоватьany
и or
, чтобы проверить, выполняется ли условие до определенного количества раз, ожидая бит перед каждой проверкой:
any(time.sleep(10) or <condition> for _ in range(max_limit))
Сначала будет оцениваться time.sleep
, что возвращает None
, а затем оцените условие до тех пор, пока условие не будет выполнено или пока range
не будет исчерпано.
Единственное предостережение в том, что это вызовет time.sleep
даже до первой проверки условия.Чтобы это исправить, вы можете сначала проверить переменную счетчика, и только если это > 0
call time.sleep
:
any(i and time.sleep(10) or <condition> for i in range(10))
Вопрос о том, яснее ли это, чем длинный цикл, решать вам.
Как предлагается в комментариях , на самом деле вы можете просто инвертировать вышеуказанное предложение any
в
any(<condition> or time.sleep(10) for _ in range(max_limit))
. Сначала выполняется проверка условия, и только если условиеложная воля sleep
.Он также готов гораздо естественнее, чем любой из вышеперечисленных аппароч.