您的位置:首页 > 其它

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后面的语句。

 

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循环遍历!!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: