Бесконечный цикл не является результатом while True:
в методе Fibonacci.series()
.Это вызвано генератором under10 = (i for i in Fibonacci.series() if i<10)
, который просто продолжает работать, так как не понимает, что полученные значения никогда не уменьшатся.Вот [другой] способ исправить это и обобщить его одновременно - без переписывания series()
- с помощью итератора itertools.takewhile()
:
import itertools
fibos_under = lambda N: itertools.takewhile(lambda f: f < N, Fibonacci.series())
for i in fibos_under(10):
print i
Кстати: Вы можете немного упростить метод Fibonacci.series()
, изменив его на тот, который дает те же значения:
class Fibonacci:
@staticmethod
def series():
fprev,fnext = 0,1
while True:
yield fnext
fprev,fnext = fnext,fprev+fnext