生成器属于迭代器

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) ]