У меня есть случай, когда мне нужно повторить какой-то блок кода:
- Иногда мне нужно повторить кодовый блок конечное число раз
- Иногда мне нужно повторять блок кода бесконечно.
Мне интересно, есть ли какой-нибудь встроенный способ Python для:
- Ограничений нет -> кодовый блок повторяется через что-то вроде
while
l oop - Предоставленный предел -> блок кода повторяется через что-то вроде
for
l oop
Примечание: я знаю Я могу использовать оператор if
(в зависимости от наличия верхнего предела) и переключаться между for
или while
l oop. Я пытаюсь не повторять блок кода дважды или он разбивается на другую функцию.
Текущая реализация
Я написал ниже некорректно (см. ниже) for_while_hybrid.py
с использованием Python 3.8.2.
from typing import Iterator
def iter_for_while(num_yield: int = None) -> Iterator[int]:
"""Generate an incrementing counter.
This enables one to make a for loop or a while loop, depending on args.
Args:
num_yield: Number of times to yield.
If left as None, the generator makes a while loop
If an integer, the generator makes a for loop
"""
counter = 0
condition = True if num_yield is None else counter < num_yield
while condition:
yield counter
counter += 1
if num_yield is not None:
condition = counter < num_yield
upper_limit = 5
for _ in iter_for_while(upper_limit):
print("Some code block") # Run 5 times
for _ in iter_for_while():
print("Some code block") # Run infinitely
Эта реализация работает.
Обратной стороной является то, что при очень долгом запуске Я беспокоюсь, что counter
займет много памяти или в конечном итоге исчерпает себя. Мой компьютер 64-разрядный, поэтому sys.maxsize = 2 ** 63 - 1 = 9,223,372,036,854,775,807
.