Python之可迭代对象、迭代器、生成器

发布时间:2024年01月18日

Python可迭代对象(Iterable)?

Python中经常使用for来对某个对象进行遍历,此时被遍历的这个对象就是可迭代对象,像常见的list,tuple都是。如果给一个准确的定义的话,就是只要它定义了可以返回一个迭代器的__iter__方法,或者定义了可以支持下标索引的__getitem__方法,那么它就是一个可迭代对象。

Python迭代器(iterator)?

迭代器是通过next()来实现的,每调用一次他就会返回下一个元素,当没有下一个元素的时候返回一个StopIteration异常,所以实际上定义了这个方法的都算是迭代器。可以用通过下面例子来体验一下迭代器:

生成器(Generators)?

生成器是构造迭代器的最简单有力的工具,与普通函数不同的只有在返回一个值的时候使用yield来替代return,然后yield会自动构建好next()和iter()

因为迭代器如此普遍,python专门为for关键字做了迭代器的语法糖。在for循环中,Python将自动调用工厂函数iter()获得迭代器,自动调用next()获取元素,还完成了检查StopIteration异常的工作。

定义迭代器?

下面一个例子——斐波那契数列

#?-*-?coding:?cp936?-*-
class?Fabs(object):
????def?__init__(self,max):
????????self.max?=?max
????????self.n,?self.a,?self.b?=?0,?0,?1??#特别指出:第0项是0,第1项是第一个1.整个数列从1开始
????def?__iter__(self):
????????return?self
????def?next(self):
????????if?self.n?<?self.max:
????????????r?=?self.b
????????????self.a,?self.b?=?self.b,?self.a?+?self.b
????????????self.n?=?self.n?+?1
????????????return?r
????????raise?StopIteration()

print?Fabs(5)
for?key?in?Fabs(5):
????print?key

结果

<__main__.Fabs?object?at?0x01A63090>
1
1
2
3
5
文章来源:https://blog.csdn.net/hakesashou/article/details/135680344
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。