生成器

什么是生成器?

生成器本质上是一个自定义的迭代器,本质上是一个迭代器

如何实现生成器?

但凡在函数内部定义了的yield,调用函数时函数代码不会执行,会返回一个结果,该结果就是一个生成器。

yield

只能在函数内部定义

def func():
    print('from func')
    yield 1
res = func()
print(res.__next__())       # 当我们通过.__next__()取值时,才会执行函数体代码

每次yield都会往生成器对象中添加一个值

yield可以保存函数的暂停状态

def func():
    print('准备开始下蛋……')
    print('--->柴鸡蛋1')
    yield '柴鸡蛋1'
    print('--->柴鸡蛋2')
    yield '柴鸡蛋2'
    print('--->柴鸡蛋3')
    yield '柴鸡蛋3'
res = func()

while True:
    try:                        # 捕获StopIteration异常
        print(next(res))
        print(next(res))
        print(next(res))
        print(next(res))        
    except StopIteration:       # 抛出StopIteration异常
        break

yield与return的区别

相同点:返回值的个数都是无限制的

不同点:return只能返回一个值,yield可以返回多个值

版权声明:本文为aheng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/aheng/p/11858299.html