Python 迭代器
迭代器简述
迭代器(iterator)是一种可在容器(container)中遍访的接口,为使用者封装了内部逻辑。
——[百度百科·迭代器](https://baike.baidu.com/item/%E8%BF%AD%E4%BB%A3%E5%99%A8/3803342?fr=aladdin[1]) 大意
举例
for i in [1,2,3,4,5]: print(i) print('-' * 10) for i in 'hello': print(i)
输出结果
1
2
3
4
5
----------
h
e
l
l
o
判断是否是迭代器
可迭代对象须具有__iter__(),可迭代对象可以使用for循环进行遍历,可以使用
from collections.abc import Iterable
模块判断是否可迭代,示例如下
print(isinstance([1,2,3,4],Iterable)) print(isinstance((1,2,3,4),Iterable)) print(isinstance('hello',Iterable)) print(isinstance(1234,Iterable)) print(isinstance({"name":'张三',"age":12},Iterable))
输出
True
True
True
False
True
创建迭代器
要定义一个数据类型,具有__iter__()
方法并且该方法返回一个带有__next__()
方法的对象,而当该类已经具有__next__()
方法时则返回其本身。示例代码如下:
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 else: self.index -= 1 return self.data[self.index]
验证
title =iter(reversed('笑傲江湖')) for i in title: print(i)
输出
湖
江
傲
笑
for 循环与迭代器
实际上在执行for
语句的时候,Python 悄悄调用了内置函数`iter()`[6],并将for
语句中的容器对象作为参数传入;而函数`iter()`[7]返回值则是一个迭代器对象。因此,for
语句是将容器对象转换为迭代器对象之后,调用__next__()
方法,逐个访问原容器中的各个对象,直到遍历完所有元素,抛出一个StopIteration
异常,并终止for
循环。