在可迭代对象上调用iter(),就会生成一个迭代器。即 迭代器 = iter(可迭代对象)
所以,可迭代对象必须内部实现__iter__()函数,返回一个迭代器。
但是迭代器也不是任何对象都可以充当的,必须要满足迭代器协议:
假设我们要遍历一个可迭代对象,该对象里面存储了不同年龄的用户信息,我们希望能用for循环遍历那些年龄超过18岁的成年用户。 所以,我们需要自定义两个类:
class AdultIterable(object):
def __init__(self, ages):
self.__ages = ages
def __iter__(self):
print("call iterable __iter__()")
return AdultIterator([x for x in self.__ages if x >= 18])
class AdultIterator(object):
def __init__(self, data):
self.__data = data
self.__index = 0
def __iter__(self):
return self
def next(self):
print("call iterator next()")
if self.__index < len(self.__data):
val = self.__data[self.__index]
self.__index += 1
return val
else:
raise StopIteration
if __name__ == "__main__":
user_ages = list(range(12, 60))
ages = AdultIterable(user_ages) # 生成一个可迭代对象
age = iter(ages) # 生成一个迭代器
print(next(age)) # 用迭代器来遍历可迭代对象
print(next(age)) # 用迭代器来遍历可迭代对象
for age in ages: # 用for来遍历
print age
本文地址已经归档到github,您可以访问下面的链接获得。
代码地址
如果觉得本文对您有帮助,敬请点赞。