Python 3.x 在Python类上使用带有“\uuuu next\uuuuu”的条件

Python 3.x 在Python类上使用带有“\uuuu next\uuuuu”的条件,python-3.x,class,next,Python 3.x,Class,Next,是否可以在类迭代器中使用\uuuuu next\uuuu方法实现条件?在下面这样的情况下,如果不满足条件,迭代器将返回None,但我希望忽略这些,只接收实际值。例如: class Foo2: def __init__(self, _min=1, _max=5): self._max = _max self._min = _min self.it = -1 def __iter__(self): return sel

是否可以在类迭代器中使用
\uuuuu next\uuuu
方法实现条件?在下面这样的情况下,如果不满足条件,迭代器将返回
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

我只想打印实际值
3
4
,但与其在循环中测试
None
,不如让类只发出这些值。有可能吗?

我不知道这是否是最正确的方法,因为我可能忽略了一些问题/缺点(如果有人能向我指出这些问题,我会非常感激),但对于这种特殊情况,如果只是基于某些条件忽略值,递归调用
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

是的,您只需要使
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>只返回您感兴趣的值,不让它返回任何其他值。(如果
If
条件均为true,则函数将返回
None
,以防您感到奇怪。)@mkrieger1
If
条件已存在,但仍返回
None
…是,因为如果控制流到达任何函数的末尾而未点击
return
语句,该函数将返回
None
。您需要确保在所有可能的情况下都有一个
return
语句。@mkrieger1我知道,但AFAIU总是会将
None
作为默认值返回,并且想知道是否有某种方法可以避免。问题是:当
self时
\uuuuuuuuuuuuu下一步\uuuuu
应该返回什么。它小于
self.\umin
。您需要确定这一点,然后编写一个
return
语句,返回您认为在这种情况下合适的值。