这是我的简单代码
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)
| 归档时间: |
|
| 查看次数: |
1000 次 |
| 最近记录: |