无限收益问题

ill*_*ant 5 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 i<10)
for i in under10 :
    print i
Run Code Online (Sandbox Code Playgroud)

这是绝对明显的,但是......为什么解释器正在执行块

while True:
                yield fnext
                fprev,fnext = fnext,fprev+fnext
Run Code Online (Sandbox Code Playgroud)

永远?我在生成器中指定,我只想要<10的元素

under10 = (i for i in Fibonacci.series() if i<10)
Run Code Online (Sandbox Code Playgroud)

恕我直言,这有点误解任何方法可以防止无限执行而不重写"系列"?

Kon*_*lph 16

口译员应该如何知道未来的所有数字都<10?它必须既知道(不知),它的搅动了斐波那契数列,或那就要检查整个系列.

它不能做第一个,所以它做第二个.

您可以使用itertools.takewhile以下方法解决此问题

import itertools

under10 = itertools.takewhile(lambda n: n < 10, Fibonacci.series())
Run Code Online (Sandbox Code Playgroud)