前一篇讲了迭代器,但是迭代器还不能用于for循环进行迭代。今天这一篇文章通过在迭代器里加入__iter__
方法,将其改造成可迭代对象。
class A:
def __init__(self):
self.a=1
def __next__(self):
self.a+=self.a
return self.a
def __iter__(self):
return self
>>> its=A()
>>> for i in its:
print(i)
if i>5:
break
2
4
8
由于__iter__
方法被规定返回一个迭代器,这里我们使用它返回迭代器本身,来完成迭代过程。注意,这个可迭代对象应用到for循环中时,需要设定一个条件通过break跳出循环,不然会一直运行下去,因为这个可迭代对象是无穷的。
下面的例子可以看出,未加入__iter__
方法时,迭代器是不可迭代的。
>>> class A:
def __init__(self):
self.a=1
def __next__(self):
self.a+=self.a
return self.a
>>> its=A()
>>> for i in its:
print(i)
if i>5:
break
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
for i in its:
TypeError: 'A' object is not iterable
我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=h82m1wln20i9
网友评论