码迷,mamicode.com
首页 > 其他好文 > 详细

yield学习

时间:2015-10-05 20:48:43      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

如果要控制内存占用,最好不要用list来保存中间结果,而是通过iterable对象(range, xrange, generator等)来迭代。
 
yield 使函数变为generator,返回对象为iterator(可通过for循环遍历)
 
在一个generator function中,默认会执行到函数完毕,如果有return命令,编译时会直接报错。在同一个函数中,yield与return互斥
可通过yield控制文件读取。
yield利用实例fabonacci:
def fab(max):
    n, a, b = 0, 0, 1
    while n < max:
        a, b = b, a+b
        n += 1
        yield b
 
>>> from inspect import isgeneratorfunction 
>>> isgeneratorfunction(fab) 
True
>>> import types 
>>> isinstance(fab, types.GeneratorType) 
False 
>>> isinstance(fab(5), types.GeneratorType) 
True
>>> from collections import Iterable 
>>> isinstance(fab, Iterable) 
False 
>>> isinstance(fab(5), Iterable) 
True
 
定义类的next方法,则根据类实例的当前变量,可通过next方法一直获取下一个值,在空间占用固定的情况下,可获得整个序列。
这也是generator的实现方式。
 
每次调用next方法时才会执行一次generator的代码。
 

yield学习

标签:

原文地址:http://www.cnblogs.com/harelion/p/4856179.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!