今天看到对python迭代器与生成器的两个例子,甚好!

来源:互联网 发布:如何注册网络写手 编辑:程序博客网 时间:2024/05/16 18:28

迭代器: 有next与__iter__方法的对象:

#!/usr/bin/env python #coding=utf-8  class Fib:     def __init__(self):         self.a,self.b = 0,1    def next(self):         self.a,self.b = self.b,self.a+self.b         return self.a     def __iter__(self):         return self

生成器: 使用yield返回值的函数:

#!/usr/bin/env python #coding=utf-8 def fib():     a,b = 0,1    while True:         a,b = b,a+b         yield a 

两个都能很优雅的输出费布拉切数列。 好处是值都是返回的时候才生成, 不会弄一个庞大的列表占内存。

执行方式分别为:

迭代器:

fibs = Fib() for f in fibs:     if f < 10000:         print f     else:         break


生成器:

for f in fib():     if f < 10000:         print f     else:         break

迭代器应用场景:

将遍历和取值的过程封装到next内部, 只返回一个可迭代对象。

生成器应用场景:

所有返回顺序可遍历对象(列表,元组,集合...)的函数,且该返回只做单次遍历业务用, 都适合用生成器来改写,少用很多内存。

0 0
原创粉丝点击