生成器属于迭代器
https://mp.weixin.qq.com/s/F3GLVY2EUpISpt_koCDmWg
生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。调用一个生成器函数,返回的是一个迭代器对象。
迭代器 for __next__
生成器 return yield
'''generator(生成器)'''
# https://mp.weixin.qq.com/s/F3GLVY2EUpISpt_koCDmWg
# 最简单的创建一个生成器的方式,只要把一个列表生成式的 [] 改成 () ,就创建了一个generator:
(x*2 for x in range(10))
# 生成器(generator)能够迭代的关键是它有一个next()方法,工作原理就是通过重复调用next()方法,直到捕获一个异常
g = (x for x in range(3)) # [0:3)
g.__next__()
# 第二种方法就是, 如果一个函数中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator
# 调用函数就是创建了一个生成器(generator)对象。
def gen_example():
print ('第1次执行啦~,还没到第一个yield!')
yield '我是第1个遇见的yield,你遇到我就要返回'
print ('第2次执行啦~,还没到第二个yield')
yield '我是第2个遇见的yield,你遇到我就要返回'
print ('第3次执行啦,我运行完 函数就执行完毕啦~')
for i in gen_example():
print(i)
print("\n--------分割线--------\n")
def evenNumber(max):
n = 0
while n < max:
yield n
n += 1
for i in evenNumber(3):
print(i)
[ i for i in evenNumber(3) ]