Проблема бесконечной доходности

Вот мой простой код

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

Это абсолютно очевидно, но ... ПОЧЕМУ интерпретатор выполняет блок

while True:
                yield fnext
                fprev,fnext = fnext,fprev+fnext

навсегда? Я указал в генераторе, что мне нужны только элементы <10

under10 = (i for i in Fibonacci.series() if i<10)

ИМХО, это небольшое недоразумение Есть ли способ предотвратить бесконечное выполнение без перезаписи «серии»?

5
задан martineau 1 November 2010 в 23:01
поделиться