看到网上的一段代码,不是很理解,>_<
class MyRange(object):
def __init__(self, n):
self.idx = 0
self.n = n
def __iter__(self):
return self
def __next__(self):
if self.idx < self.n:
val = self.idx
self.idx += 1
return val
else:
raise StopIteration()
if __name__ == "__main__":
myRange = MyRange(3)
print([i for i in myRange])# 输出:[0, 1, 2]
# for in 执行流程如下
# iter(myRange)
# 执行了三次 next(myRange)
# 遇到 StopIteration 异常后,停止循环
print([i for i in myRange]) # 输出:[]
# 为什么输出 [] 而不是 [0, 1, 2]
# 执行流程应该还是一样的
# iter(myRange)
# 执行了三次 next(myRange)
# 遇到 StopIteration 异常后,停止循环
1
introom 2016-12-16 20:27:18 +08:00 1
因为 myRange.idx 到 3 了呀。。。。
|