【发布时间】:2020-10-17 13:10:13
【问题描述】:
是否可以使用__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
我只想打印3 和4 的实际值,而不是在循环中测试None,让类只发出这些值会更好。有可能吗?
【问题讨论】:
-
是的,您只需要让
__next__只返回您感兴趣的值,而不让它返回任何其他值。 (如果if条件都不为真,则函数将返回None,以防您想知道。) -
@mkrieger1
if条件已经存在但仍返回None... -
是的,因为如果控制流到达任何函数的末尾而没有遇到
return语句,该函数将返回None。您需要确保在所有可能的情况下都有return语句。 -
@mkrieger1 我知道,但 AFAIU 将始终默认返回
None,并且想知道是否有办法避免这种情况。 -
问题是:当
self.it小于self._min时__next__应该返回什么。您需要做出决定,然后编写一个return语句,返回您认为在这种情况下合适的值。
标签: python-3.x class next