python编程,一看就懂的代码示例讲解yield和生成器

摘要:本文主要通过代码示例详解yield和生成器、yield 对象、yield from 、next()和send()的区别。

python编程,一看就懂的代码示例讲解yield和生成器

一、yield和生成器

1.yield只能在函数中使用,yield一次返回一个结果。

2.当函数中包含yield时,在调用的时候不会马上执行,而是返回一个生成器。

3.每次访问生成器实时生成一个成员,不保留结果和状态,因此当所有成员访问结束时,再次访问将抛出异常。

python编程,一看就懂的代码示例讲解yield和生成器

二、yield对象

python中一切都是对象,因此yield生成器、函数等等本质都是yield对象。

python编程,一看就懂的代码示例讲解yield和生成器

三、 yield from的使用

yield from 后面需跟一个迭代器。

python编程,一看就懂的代码示例讲解yield和生成器

等同于以下代码:

python编程,一看就懂的代码示例讲解yield和生成器

四、next()和send()的区别。

python中两者均可以访问生成器,但区别很大。

next()可以指定默认的返回值,这样生成器在stop之后不会抛出StopIteration异常。

python编程,一看就懂的代码示例讲解yield和生成器

send()必须给生成器传递一个对象,且只能传递一个对象,其中第一次必须传递None。

python编程,一看就懂的代码示例讲解yield和生成器

五、生成器的神奇之处

1. 极大的减少了对内存的占用。

2. 可以实现协同作业,比如爬虫框架scrapy中处处yield。

六、小结

yield和生成器是python独特的功能,在大文件、网络传输、递归、多线程等有强大作用。


分享到:


相關文章: