yield的使用

参考:python

http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/函数

http://blog.csdn.net/alvine008/article/details/43410079工具

在函数fun实现中,若是使用yield,那么函数返回值就是一个generator,用于迭代。迭代的next隐含在for 循环中,每次next,fun就相似产生一个中断,返回yield后面的语句。spa

 

def fab(max): 
    n, a, b = 0, 0, 1 
    while n < max: 
        yield b 
        # print b 不是很好,若是返回值要使用,就不行了
        # 若是用list保存,浪费资源
        a, b = b, a + b 
        n = n + 1

if __name__ == '__main__':
    for n in fab(5): 
        print n

 

说明:.net

(1)含有yield的函数A的返回值,能够做为入参传递给函数B中for循环处理,函数B中同时也能够含有yield,返回值继续做为参数给函数C处理……………….。例如:开发一个工具,读pcap报文,对长度超过1000的报文分片,那么,读报文函数read_pkt中可用yield,分片处理frag_pkt中也可使用yield,最后的写结果 write_ret可使用 fag_pkt的返回直接写结果,整个流程就是:read_pkt---frag_pkt---write_ret的顺序调用,很简介!!!设计

(2)好处,一系列含有yield的函数,在前后顺序的流水线上处理,前一函数的输出(yield),不须要定义对象来保存输出结果,使用yield后的返回值,能够继续传递给下一个函数,总体设计更加简洁高效。code

(3)对有 yield函数的返回值,for循环变量完成后,不能再进行for循环遍历!!!!!对象

相关文章
相关标签/搜索