Python 中生成器实现无限序列
如何使用生成器实现无限序列?请用代码实现一个无限自然数序列和无限斐波那契数列。
回答
Yahuda
生成器可以轻松表示无限序列,因为它是惰性求值的。
def naturals(start=0):
while True:
yield start
start += 1
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
# 使用
nats = naturals()
print(next(nats)) # 0
print(next(nats)) # 1
fib = fibonacci()
first_10 = [next(fib) for _ in range(10)]
print(first_10) # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
注意事项:
- 无限序列不能转换为 list(内存溢出)
- 使用
itertools.islice截取前 N 个:list(islice(fibonacci(), 10)) - 适合流式处理、数据管道等场景