Я бы начал с
if limit is None: return
, поскольку ничего не может случиться с limit
, когда он начинается как None
(если в итерации и при вычислении predicate
нет желательных побочных эффектов - если таковые имеются, то в этом случае вы можно просто сделать for i in xrange(10**5): predicate(i)
).
Если limit
не None
, то вы просто хотите выполнить max(limit, 1)
вычислений predicate
, которые являются истинными, поэтому itertools.islice
из itertools.ifilter
будет делать:
import itertools as it
def ello_bruce(limit=None):
if limit is None:
for i in xrange(10**5): predicate(i)
else:
for _ in it.islice(
it.ifilter(predicate, xrange(10**5),
max(limit, 1)): pass