Python-迭代协议-__iter__ __next__ iter next yield
iter 本质是for循环调用的实质,for循环通过调用这个函数返回可迭代对象生成器形式,开始迭代取值捕获StopIteration错误退出循环 for循环首先找__iter__方法,然后再找 __getitem__方法,如果都没找到则报错,对象不是可迭代对象 __iter__ 如果是自定义类生成的对象则iter方法调用__iter__函数, 这个函数必须返回迭代器对象 next 启动生成器。并获取生成器第一个值 __next__ 将对象变成生成器对象,也是 next方法调用对象中 __next__ 方法 from random import randint class BeiMenChuiXue: """自己实现的迭代器""" def __init__(self, iterable): self.iterable = iterable def __next__(self): for member in self.iterable: yield member class DuGuJiuJiu: """可迭代对象""" def __init__(self, numbers): self.numbers = numbers def __iter__(self): # 通过全局函数 iter实现 # return iter(self.numbers) #