python爬虫中会经常出现yield,yield是啥呢?他有啥作用呢?
自己的理解
- 具有return的功能
- 使用yield 的函数是一个生成器。
- 具备事件触发的特性,使用yield实现异步通信
yield 生成器和return功能
|
|
运行程序得到如下结果:
|
|
这里Fab
是类型是一个列表,可以想象,如果传的参数max越大,就会产生一个巨大的列表,占用较大的内存空间。所以我们可以考虑把fab 改写成 iterable对象。具体实现方法就是内置函数__iter_
_, next
来实现,最简单的方法是直接使用yield
上面的代码用yield实现:
|
|
输出结果如下:
|
|
可以看到type(Fab)
返回的是一个生成器的实例,大家一定注意到在这个实例中循环了两次Fab ,第二次是打印任何数据,这是生成器的特性决定的.
yield异步通信及协程
在python中比较典型的的应用是生产者消费者模式,此外在python2中协程主要是gevent,在python3中已经自己实现了协程语法yield from
及其封装asyncio.coroutine
协程作为下一篇博客来写。