我并无恶意,我也是来讨论问题。
for in 对应的是可迭代对象,它会调用__iter__,得到一个可迭代对象,如果这个对象是迭代器,它会调用迭代器的 __next__方法,系统会自行处理Stop iteration异常。
也就是说,__next__是用来实现迭代器的,你将__next__写为一个生成器后,得到的是一个生成器迭代器,在生成器迭代器里引发Stopiteration 会产生一个 RuntimerError异常
: ...................
我到这里是来讨论问题的, 我一开始标题就告知, 在讨论 for in的实现问题,
__iter__ 当然可以返回迭代器对象, 而且, 返回迭代器是for in的大多数实现,
但是, 如果你仔细看规范, for 循环并不要求是迭代器对象,
而是更宽泛的, Iterable, 而且, 使用生成函数, 自由度更高。
#发自zSMTH@CDU.MP
--
FROM 171.120.158.*