Вот подход, который не требует использования цикла for
или определения промежуточной функции или лямбда-функции (и также является однострочным). Метод объединяет следующие две идеи:
Собрав их вместе, мы получим:
next(islice(iter(do, object()), 3, 3), None)
(Идея передать object()
в качестве стража происходит от этого принятого ответа переполнения стека.)
А вот как это выглядит из интерактивной подсказки:
>>> def do():
... print("called")
...
>>> next(itertools.islice(iter(do, object()), 3, 3), None)
called
called
called