python 可迭代对象 队列_python里面的迭代、可迭代对象、迭代器

迭代(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

至此,该可迭代对象完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值