yield的使用
2016-07-28 16:29
253 查看
参考:
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后面的语句。
说明:
(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后的返回值,可以继续传递给下一个函数,整体设计更加简洁高效。
(3)对有 yield函数的返回值,for循环变量完成后,不能再进行for循环遍历!!!!!
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后面的语句。
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
说明:
(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后的返回值,可以继续传递给下一个函数,整体设计更加简洁高效。
(3)对有 yield函数的返回值,for循环变量完成后,不能再进行for循环遍历!!!!!
相关文章推荐
- 基于 WebAPI 的 API 实现
- python——周边
- 【HEVC帧间预测论文】P1.2 An Efficient Inter Mode Decision Approach for H.264 Video Codin
- OSG帮助文档生成
- Insight task:annotation-driven 解析 | Insight 常识
- Faster R-CNN系列之PYTHON篇
- hihoCoder :Memory Allocating Algorithm
- HDU 4864 Task
- java语言基础入门——字符串两种建立方式的比较
- java按一定数量补0,随机数获取
- return x与exit(x)到底有什么区别
- Git 进阶 —— 远程仓库
- Selenium源码分析之WebDriver
- 2116数据结构实验之链表一:顺序建立链表
- 2016最新最全的App上架AppStore教程
- 使用ngrok让微信公众平台通过80端口访问本机
- POJ 2386 Lake Counting(水淹菜地,DFS,八连通,连通分量)
- poj2251 Dungeon Master 简单BFS
- 移动端设计规范
- 【Android笔记】Service的生命周期