Python可迭代对象(Iterable)
Python中经常使用for来遍历一个对象,此时遍历的对象是一个可迭代的对象,比如常见的列表、元组等。如果你给出一个准确的定义,只要定义了可以返回迭代器的__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
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Python cmath 模块使用12/25
- ♥ python语言能做什么08/27
- ♥ 如何实现python tkinter布局接口?12/07
- ♥ 如何在python中从控制台输入08/13
- ♥ 如何在mac上安装python3.610/30
- ♥ 如何在python中将数据导出到excel文件08/16
内容反馈