Python 无限屈服问题

Python 无限屈服问题,python,generator,Python,Generator,这是我的简单代码 class Fibonacci: @staticmethod def series(): fprev = 1 fnext = 1 yield fnext while True: yield fnext fprev,fnext = fnext,fprev+fnext under10 = (i for i in Fibonacci.series() if

这是我的简单代码

class Fibonacci:
    @staticmethod
    def series():
        fprev = 1
        fnext = 1
        yield fnext
        while True:
            yield fnext
            fprev,fnext = fnext,fprev+fnext

under10 = (i for i in Fibonacci.series() if i<10)
for i in under10 :
    print i
永远? 我在生成器中指定,我只需要元素 编辑:


我更喜欢康拉德的itertools示例,我总是忘记itertools

解释器如何知道所有未来的数字都将<10?它要么知道(不知何故)它正在大量生产斐波那契数列,要么必须检查整个数列

它不能做第一件事,所以它做第二件事

您可以使用以下方法解决此问题:

导入itertools
under10=itertools.takewhile(lambda n:n<10,Fibonacci.series())

无限循环不是
的结果,而True:
Fibonacci.series()
方法中。它是由
under10=(Fibonacci.series()中的i代表i)引起的,如果i@phimuemue:同意,如果你使用发电机,takewhile是必须的谢谢,康拉德。这正是我想要的
while True:
                yield fnext
                fprev,fnext = fnext,fprev+fnext
under10 = (i for i in Fibonacci.series() if i<10)
under10 = (i for i in Fibonacci.series() if i<10) 
for i in Fibonacci.series():
    if i > 10:
        break
    #do your appends and such here
import itertools

under10 = itertools.takewhile(lambda n: n < 10, Fibonacci.series())
import itertools
fibos_under = lambda N: itertools.takewhile(lambda f: f < N, Fibonacci.series())

for i in fibos_under(10):
    print i
class Fibonacci:
    @staticmethod
    def series():
        fprev,fnext = 0,1
        while True:
            yield fnext
            fprev,fnext = fnext,fprev+fnext