Bootstrap

Python中yield的使用小述

Python中yield恐怕是最迷人的特性之一了,不过要想理解到位也需要费点功夫。官方有一份比较详细的介绍,是基于v2.5.2的。虽然较长,不过建议耐心看完。本文只是想说多一些个人理解。

Python支持yield,主要是为了解决C++/Java中常见的回调函数(callback)问题,不得不说,Python的yield方式比callback要优雅得多。

函数体中如果用了yield, 那么它就变成一个函数生成器,而非直接返回值(或对象)的普通函数。确切的说,它返回的是一个迭代器。迭代器的典型用法比如:

for i in iter_01:
    print i
这里,如果有C++/Java基础的同学可能更习惯于以下写法:

for i in range(3):
    print i
注意:这里range(3)返回的是一个Python列表(list),但是这个列表并不是一般意义上C++/Java那样的数组,python里的列表实现了迭代器, 我们可以打开list的帮助文档:

>>> help(list)

...

 __iter__(...)

...

看见了吧,Python的list实际上实现了迭代器。所以请记住,Python里

;