【发布时间】:2018-03-23 16:12:50
【问题描述】:
有人能解释一下迭代器和可迭代对象之间的区别吗?
此外,拥有一个同时定义 dunder 方法 __iter__ 和 __next__ 的类是否是一个好习惯?
class MyIter:
def __init__(self, n):
self.n = n
def __iter__(self):
return self
def __next__(self):
self.n /= 2
if self.n < 1:
raise StopIteration
return self.n
【问题讨论】:
-
which 问题的最佳解决方案究竟是什么?您的所有示例都是预期的行为。
-
A 有一个大类,我多次使用迭代器,所以实际上以上都没有真正适合我
-
为什么迭代器到达终点后要重置自己?迭代器本身无法区分它被
list(x)(您似乎希望它重置)和for i in x:)(重置本身会产生无限循环)之间的区别。 -
听起来你不明白迭代器和可迭代对象的区别。也许你从那些糟糕的教程中学到了,他们通过将对象变成自己的迭代器来使对象可迭代。如果要反复吃蛋糕,就不要买可重复使用的蛋糕;你需要一个蛋糕的来源,比如面包店,它本身并不是蛋糕。如果要反复迭代,则不需要可重用的迭代器;你需要一个迭代器的源,它本身不是一个迭代器。