class User:
# 定义可迭代对象
def __init__(self,name):
self.name = name
def __iter__(self):
return MyIterator(self.name) #返回该可迭代对象的迭代器的实例
from collections.abc import Iterable,Iterator
class MyIterator(object):
#定义迭代器 , 继承Iterator就不要再去实现__iter__
def __init__(self,name):
self.index = 0
self.iter_name = name
def __iter__(self):
return self # 返回该对象的迭代器类的实例;因为自己就是迭代器,所以返回self
def __next__(self):
try:
word = self.iter_name[self.index]
except IndexError:
raise StopIteration
self.index += 1
return word
if __name__ == "__main__":
user = User(["zhou","bob","java"])
for it in user:
print(it)
>>>
zhou
bob
java
迭代对象和迭代器是实现了 __iter__ 方法的
而迭代器是额外还需要实现了 __next__ 方法的
可迭代对象, 迭代器 ,生成器, 序列 ,字典的关系如下:
image结论如下:
1)在可迭代对象基础上,继续实现 __next__ 就是迭代器。
2)如果一个对象拥有iter方法,其是可迭代对象;如果一个对象拥有next方法,其是迭代器。
3)定义可迭代对象,必须实现iter方法;定义迭代器,必须实现iter和next方法。
网友评论