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