迭代器


生成器(generator)

1 生成器是一种特殊的迭代器,它比迭代器更优雅,编写更加简洁。

2 生成器(Generator),可以一边循环一边计算后续的元素,这样就不必创建完整的list,从而节省大量的空间。

3 通过next(generator)方法打印数据,generator保存的是算法,每次调用next(),就计算出下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。

创建生成器

方法1:只要把一个列表生成式的 [ ] 改成 ( )

G=(x*2 for x in range(6)) # 生成器对象

# 输出方式:
# 1.
# for i in G:
# print(i)
# 2.
while True:
try:
print(next(G))
except:
break

方法2 使用yield创建生成器

# -*-coding:utf-8-*-
def gen(n):
"""斐波那契"""
i, a, b = 0, 0, 1
while i < n:
a, b = b, a + b
i += 1
yield b

g = gen(10)
while True:
try:
print(next(g))
except:
break

要点:

1. 假如函数中有yield,则不再是函数,而是生成器

2. yield 会产生一个断点,挂起函数, 且保存当前状态

3. 若yield后面紧接着一个数据,就会把数据返回,作为next打印的下一个值

4.可以通过next或send唤醒生成器,让生成器从断点处继续执行,g.send(None)等价于next(g)

5.send方法可在唤醒的同时向断点处传入一个附加数据:print("返回值:",gen.send("python"))

6 这3种方法都可以生成下一个数据

g = gen(10) # g是生成器

print(g.__next__())

print(next(g))

print(g.send(None))

posted @ 2021-02-07 22:42  涛子17180  阅读(8)  评论(0编辑  收藏  举报