创建生成器
创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。
>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x000000000315B200>
通过next()函数获得generator的下一个返回值
>>> next(g)
0
>>> next(g)
1
调用next到没有元素的时候,会有StopIteration的错误
循环打印
>>> g = (x * x for x in range(10))
>>> for n in g:
... print(n)
...
0
1
4
9
16
25
36
49
64
81
def fib(max):
n, a, b = 0, 0, 1
while n < max:
print(b)
a, b = b, a + b
n = n + 1
return 'done'a, b = b, a + b
相当于:t = (b, a + b) # t是一个tuple 元组
a = t[0]
b = t[1]
如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
return 'done'>>> f = fib(6)
>>> f
<generator object fib at 0x104feaaa0>generator的函数,每次调用
next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
本文介绍了Python中生成器的概念,展示了如何使用列表推导式和生成器表达式创建生成器,并通过示例解释了如何利用next()函数遍历生成器及处理常见的StopIteration异常。此外,还探讨了使用带有yield关键字的函数来实现更复杂的生成器,如斐波那契数列。
8126

被折叠的 条评论
为什么被折叠?



