迭代器和/或iterable差分和相似?

2024-06-28 19:42:20 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能解释一下迭代器和iterable之间的区别吗

此外,如果有一个同时定义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 

Tags: 方法selfreturnif定义initdefiterable
1条回答
网友
1楼 · 发布于 2024-06-28 19:42:20

如果您希望实例像生成器一样工作,因此是可穷尽的,那么只需实现__next__。在这里,您希望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如此有用

相关问题 更多 >