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