迭代(Iteration): 对一组序列进行遍历的过程本身就是迭代,
可迭代对象(Iterable):python中任意对象,只要能返回一个迭代器方法__iter__的对象,或者有下标索引__getitem__方法的对象就是一个可迭代对象。
迭代器(Iterator):python中任意对象,只要拥有__next__方法,就是一个迭代器。
想知道一个对象是否是可迭代对象,是否拥有迭代器,可以使用 collections 包下的 Iterable(可迭代对象)、Iterator(迭代器) 通过isinstance()方法来查看。
classMyList:"""创建一个向空列表里面添加数据的类"""
def __init__(self):"""初始化,创建实例对象"""self.mylist=list()defadd(self, num):"""向列表里面添加数据"""self.mylist.append(num)
nums=MyList()
nums.add(1)
nums.add(2)
nums.add(3)
nums.add(4)for num innums:print(num)
输出结果:
Traceback (most recent call last):
File"D:/iteration.py", line 18, in
for num innums:
TypeError:'MyList' object is not iterable
为什么会出现这个错误呢?
因为Mylist对象不是一个可迭代对象
怎么让他成为一个可迭代对象呢?如下代码:
classMyList:"""创建一个向空列表里面添加数据的类"""
def __init__(self):"""初始化,创建实例对象"""self.mylist=list()defadd(self, num):"""向列表里面添加数据"""self.mylist.append(num)def __iter__(self):
"""passnums=MyList()
nums.add(1)
nums.add(2)
nums.add(3)
nums.add(4)for num innums:print(num)
运行结果:
Traceback (most recent call last):
File"D:/iteration.py", line 22, in
for num innums:
TypeError: iter() returned non-iterator of type 'NoneType'
此时的错误提示为:iter()方法返回一个空类型,并且这个类型没有迭代器
也就是说,可迭代对象里面必须有一个__next__方法
如下代码:
classMyList:"""创建一个向空列表里面添加数据的类"""
def __init__(self):"""初始化,创建实例对象"""self.mylist=list()
self.current=0defadd(self, num):"""向列表里面添加数据"""self.mylist.append(num)def __iter__(self):returnselfdef __next__(self):#记录上一个数据
if self.current
last=self.mylist[self.current]
self.current+= 1
returnlastelse:#抛出异常
raiseStopIteration
nums=MyList()
nums.add(1)
nums.add(2)
nums.add(3)
nums.add(4)for num innums:print(num)
运行结果:
1
2
3
4
Process finished with exit code 0
至此,该可迭代对象完成。