在Python类中使用带有`__next__`的条件

bjp0bcyl  于 2023-06-07  发布在  Python
关注(0)|答案(1)|浏览(111)

可以用__next__方法在类迭代器中实现条件吗?在类似下面的情况下,如果不满足条件,迭代器将返回None,但我想省略这些,只接收实际值。例如:

class Foo2:
    def __init__(self, _min=1, _max=5):
        self._max = _max
        self._min = _min
        self.it = -1

    def __iter__(self):
        return self

    def __next__(self):
        self.it += 1
        if self.it == self._max:
            raise StopIteration
        if self.it > self._min:
            return self.it

fu = Foo2(_min=2, _max=5)
for x in fu:
    # if x:  -> can this be controlled by the __next__ method in the class?
    print(x)

# prints
None
None
None
3
4

我想只打印实际值34,但不是在循环中测试None,让类只发出这些值会更好。这可能吗?

68bkxrlz

68bkxrlz1#

我不知道这是否是最正确的方法,因为我可能忽略了一些问题/缺点(如果有人能向我指出这些问题,我会很感激),但是对于这个特定的情况,如果感兴趣的是只忽略基于某些条件的值,递归调用next似乎可以做到这一点:

def __next__(self):
    self.it += 1
    if self.it == self._max:
        raise StopIteration
    elif self.it > self._min:
        return self.it
    else:
        return self.__next__()

for循环中工作,并直接调用next

fu = Foo2(_min=2, _max=5)
for x in fu:
    print(x)

# prints
3
4

fu = Foo2(_min=2, _max=5)
print(next(fu))  # 3
print(next(fu))  # 4
print(next(fu))  # raise StopIteration

相关问题