【问题标题】:How to create reusable generator classes in Python?如何在 Python 中创建可重用的生成器类?
【发布时间】:2020-12-01 17:06:30
【问题描述】:

我需要创建可以多次使用的生成器。我有这样的课程:

class iter_maker:
    def __iter__(self):
        return self

class next_maker():
    def __next__(self,):
        self.count+=1
        if self.count > self.limit:
            raise StopIteration
        return self.count ** 2

class sq(iter_maker, next_maker):
    def __init__(self, limit):
        self.count = 0
        self.limit = limit

所以,当我创建一个实例时:

w = sq(10)

和:

print(list(w))
print(list(w))

我明白了:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[]

但我想要:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

我认为__iter__ 方法每次使用它时都必须返回新对象,但我不知道该怎么做。

谢谢!

【问题讨论】:

    标签: python class methods iterator generator


    【解决方案1】:

    这取决于你想如何使用它。如果只是如上所述(或类似),那么这应该可以工作:

    class sq:
        
        def __init__(self, limit):
            self.limit = limit
        
        def __iter__(self):
            yield from (n**2 for n in range(1, self.limit + 1))
    

    这个

    w = sq(10)
    print(list(w))
    print(list(w))
    

    给你

    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    

    【讨论】:

      猜你喜欢
      • 2018-12-18
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 2017-10-30
      • 2019-01-12
      • 1970-01-01
      相关资源
      最近更新 更多