Я использую iter
с двумя аргументами и задавался вопросом, есть ли эквивалент, который бы принял более сложный страж?Есть ли итератор, который принимает сложный страж?
В качестве примера, в коде ниже
# returns digits 1 to 10 upon subsequently calling .create(),
# then returns 'END' each time afterwards
class MyClass:
def __init__(self):
self.counter = 0
def create(self):
self.counter += 1
if self.counter > 10:
return 'END'
else:
return self.counter
c = MyClass()
for i in iter(c.create, 'END'):
print(i)
итерации заканчивается при получении 'END'
. Я хотел бы, чтобы это закончилось после получения, скажем, двух 'END'
(не обязательно один за другим), код выше будет генерировать только 'END'
после первых десяти вызовов, но можно представить случай, когда они чередуются с другими значениями).
В сущности, я ищу способ использования более сложного часового. Есть ли такая концепция?
Я знаю, что может прибегнуть к очевидному но-уродливому коду, указанному в previous question, hovewer @HappyLeapSecond ответ настолько элегантен, я хотел бы сохранить дух (я пошел, хотя itertools
, но ни один из доступных методов не кажется, делает работа)