Я в целом согласен с решениями, приведенными выше. А именно с:
- Использование подчеркивания в
for
-loop (2 и более строк)
- Определение нормального
while
счетчика (3 и более строк)
- Объявление пользовательского класса с реализацией
__nonzero__
(еще много строк)
Если определить объект как в # 3 , я бы порекомендовал реализовать протокол для с ключевым словом или применить contextlib .
Далее я предлагаю еще одно решение. Это трехслойный лайнер, не обладающий исключительной элегантностью, но он использует пакет itertools и, следовательно, может представлять интерес.
from itertools import (chain, repeat)
times = chain(repeat(True, 2), repeat(False))
while next(times):
print 'do stuff!'
В этом примере 2 - это количество повторений цикла. цепочка оборачивает два повторных итератора, первый ограничен, а второй бесконечен. Помните, что это настоящие итераторы, поэтому они не требуют бесконечной памяти. Очевидно, что это намного медленнее, чем решение # 1 . Если не написано как часть функции, может потребоваться очистка переменной times .