Повторный комментарий thg435:
from itertools import takewhile, count
def thereIsAReasonToContinue(i):
return not thereIsAReasonToBreak(i)
for i in takewhile(thereIsAReasonToContinue, count()):
pass # or something else
Или, возможно, более кратко:
from itertools import takewhile, count
for i in takewhile(lambda x : not thereIsAReasonToBreak(x), count()):
pass # or something else
takewhile
имитирует «хорошо себя ведущий» цикл C for: у вас есть условие продолжения, но у вас есть генератор вместо произвольного выражения. Есть вещи, которые вы можете сделать в цикле C for, которые «плохо себя ведут», такие как изменение i
в теле цикла. Можно также подражать тем, кто использует takewhile
, если генератор является замыканием по некоторой локальной переменной i
, с которой вы затем связываетесь. В некотором смысле, определение этого замыкания делает особенно очевидным, что вы делаете что-то, что потенциально может привести к путанице с вашей структурой управления.