python 可迭代对象——Iterable
Python中经常使用for来对某个对象进行遍历,此时被遍历的这个对象就是可迭代对象,像常见的list、tuple、dict、set、str都是。如果给一个准确的定义的话,就是只要它定义了可以返回一个迭代器的iter方法,或者定义了可以支持下标索引的getitem方法,那么它就是一个可迭代对象。
python 迭代器对象——Iterator
迭代器是通过next()来实现的,每调用一次他就会返回下一个元素,当没有下一个元素的时候返回一个StopIteration异常,所以实际上定义了这个方法的都算是迭代器。迭代器一定是可迭代对象,反过来则不一定成立。用iter()函数可以把list、dict、str等Iterable变成Iterator
下面通过创建一个迭代器对象来说明:
创建一个Reverse对象,将序列中的对象进行翻转。
class Reverse(object):
def __init__(self, data):
self.data = data
self.index = len(data)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index -= 1
return self.data[self.index]
rev = Reverse([1,2,3,4,5])
for x in rev:
print(x)
得到结果:
5
4
3
2
1
在进行for循环时,首先调用iter()方法,得到一个迭代器对象,然后调用该迭代器对象的next()方法,每次返回一个值。
——————————————————————————
创建迭代器的三种方式:
1、定义一个容器,并添加iter()和next()方法(python 2中为next()方法);iter()返回迭代器对象本身,next()返回每次调用 next() 或迭代时的元素;
2、通过iter()将可迭代对象转换为迭代器;
3、生成器。生成器通过yield语句快速生成迭代器,省略了复杂的iter()和next()方法。