转载自http://www.cnblogs.com/cotyb/p/5260032.html
当处理大量数据的时候,一个长的数列会浪费很多资源,所以Python的处理办法是通过yield语句,从函数的角度讲和return是一样的道理,但是yield得会上次的执行结果,通过next语句,每next一次 就返回下一次的结果,一直到迭代完成,抛出错误,结束迭代。
#coding
def cube(n):
for i in range(n):
yield i ** 3
for i in cube(5):
print i
#output
0
1
8
27
64
从例子中看出来,cube(5)
>>> # 列表解析生成列表
>>> [ x ** 3 for x in range(5)]
[0, 1, 8, 27, 64]
>>>
>>> # 生成器表达式
>>> (x ** 3 for x in range(5))
<generator object <genexpr> at 0x000000000315F678>
>>> # 两者之间转换
>>> list(x ** 3 for x in range(5))
[0, 1, 8, 27, 64]