迭代器是在版本2.2被加入到python的,它为类序列对象提供了一个类序列的接口。python的迭代无缝地支持序列对象,而且它还允许程序员迭代非序列类型,包括用户定义的对象。
迭代器用起来很灵巧,你可以迭代不是序列但表现处序列行为的对象,例如字典的键、一个文件的行,等等。当你使用循环迭代一个对象条目时,你几乎分辨不出它是迭代器还是序列。你不必去关注这些,因为python让它像一个序列那样操作。
迭代器的作用如下:
- 提供了刻扩展的迭代器接口;
- 对列表迭代带来了性能上的增强;
- 在字典迭代中性能提升;
- 创建真正的迭代接口,而不是原来的随即对象访问;
- 与所有已经存在的用户定义的类以及扩展得模拟序列和映射的对象向后兼容;
- 迭代非序列集合(例如映射和文件)时,可以创建更简洁可读的代码。
举个例子:
>>> a = [111,221,333]
>>> b = iter(a)
>>> b.next()
111
>>> b.next()
221
>>> b.next()
333
>>> b.next()
Traceback (most recent call last):
File "<pyshell#25>", line 1, in <module>
b.next()
StopIteration
next(...)会一直执行下去,当没有了会报错,所以需要判断list的长度。
iter的方法:
>>> help(b)
Help on listiterator object:
class listiterator(object)
| Methods defined here:
|
| __getattribute__(...)
| x.__getattribute__('name') <==> x.name
|
| __iter__(...)
| x.__iter__() <==> iter(x)
|
| __length_hint__(...)
| Private method returning an estimate of len(list(it)).
|
| next(...)
| x.next() -> the next value, or raise StopIteration
其中:__length_hint__(...)是iter的长度;next(...)是listiterrator的下一个指标。
#分别类似于java中的,hasnext(...)方法和next(...)方法。
>>> for i in range(b.__length_hint__()):
print(b.next())
1
2
3
43
4