По аналогии с функцией take
в Haskell, вы можете построить «ограниченный» генератор на основе другого генератора:
def take(n,gen):
'''borrowed concept from functional languages'''
togo=n
while togo > 0:
yield gen.next()
togo = togo - 1
def naturalnumbers():
''' an unlimited series of numbers '''
i=0
while True:
yield i
i=i+1
for n in take(10, naturalnumbers() ):
print n
Вы можете продвинуть эту идею с помощью генератора "while", "while", ...
def gen_until( condition, gen ):
g=gen.next()
while( not condition(g) ):
yield g
g=gen.next()
И используйте это как
for i in gen_until( lambda x: x*x>100, naturalnumbers() ):
print i
...