摘要:本文主要通过代码示例详解yield和生成器、yield 对象、yield from 、next()和send()的区别。
一、yield和生成器
1.yield只能在函数中使用,yield一次返回一个结果。
2.当函数中包含yield时,在调用的时候不会马上执行,而是返回一个生成器。
3.每次访问生成器实时生成一个成员,不保留结果和状态,因此当所有成员访问结束时,再次访问将抛出异常。
二、yield对象
python中一切都是对象,因此yield生成器、函数等等本质都是yield对象。
三、 yield from的使用
yield from 后面需跟一个迭代器。
等同于以下代码:
四、next()和send()的区别。
python中两者均可以访问生成器,但区别很大。
next()可以指定默认的返回值,这样生成器在stop之后不会抛出StopIteration异常。
send()必须给生成器传递一个对象,且只能传递一个对象,其中第一次必须传递None。
五、生成器的神奇之处
1. 极大的减少了对内存的占用。
2. 可以实现协同作业,比如爬虫框架scrapy中处处yield。
六、小结
yield和生成器是python独特的功能,在大文件、网络传输、递归、多线程等有强大作用。
閱讀更多 IT老友 的文章