生成器与yield关键字

yield关键字使用在生成器函数中

yield与return
    相同点:
        函数执行到yield和return时,都将返回结果
    不同点:
        函数执行到return时,函数会结束调用
        函数执行到yield时,函数会暂停,并记录当前的位置,下一次调用时从此位置继续执行
生成器函数被调用时的执行过程
    生成器函数被调用后,返回了一个iterator
    1.第一次调用iterator:
        执行到第一个yield时,返回yield 1,暂停执行,记录此位置,等待下一次被调用
    2.第二次调用iterator:
        执行到第二个yield时,返回yield 2,暂停执行,记录此位置,等待下一次被调用
    3.第三次调用iterator:
        执行到第三个yield时,返回yield 3,暂停执行,记录此位置,等待下一次被调用
定义普通函数,return后面的代码不再执行
def Func() :
    print('A 1')
    return 1
    print('B 2')
    return 2
Func()
print(Func())

A 1
A 1
1
定义生成器函数,使用yield关键字
def func() :
    print('A 1')
    yield 1
    print('B 2')
    yield 2
    print('C 3')
    yield 3
调用生成器函数,返回iterator
res = func()
print(res)

<generator object func at 0x000000D19F0C00C8>
调用生成器函数返回的iterator
next(res)
print(next(res))
print(next(res))

A 1
B 2
2
C 3
3
list()、tuple()等容器类型函数调用生成器返回的iterator时,会把返回结果作为容器的元素
print(list(res))
print(tuple(res))

[]
()