2024-06-28 19:42:20 发布
网友
有人能解释一下迭代器和iterable之间的区别吗
此外,如果有一个同时定义dunder方法__iter__和__next__的类,这是否是一个好的实践
__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
如果您希望实例像生成器一样工作,因此是可穷尽的,那么只需实现__next__。在这里,您希望MyIter.__iter__返回一个生成器,否则任何更改实例的操作都会影响迭代
MyIter.__iter__
class MyIter: def __init__(self, n): self.n = n def __iter__(self): n = self.n while n >= 1: yield n n /= 2 obj = MyIter(10) list(obj) # [10, 5.0, 2.5, 1.25] list(obj) # [10, 5.0, 2.5, 1.25]
还要注意的是,具有__next__的类实例是可穷举的并不是问题。事实上,正是这一点使得类itertools.product如此有用
itertools.product
如果您希望实例像生成器一样工作,因此是可穷尽的,那么只需实现
__next__
。在这里,您希望MyIter.__iter__
返回一个生成器,否则任何更改实例的操作都会影响迭代还要注意的是,具有
__next__
的类实例是可穷举的并不是问题。事实上,正是这一点使得类itertools.product
如此有用相关问题 更多 >
编程相关推荐