【发布时间】:2018-08-16 15:31:41
【问题描述】:
我有一个过滤列表的生成器函数:
def gen_func(numbers):
for number in numbers:
if "?" in number:
yield number
for item in gen_func(["trunk", "tr?ee", "+lea?f"]):
print(item)
输出:
tr?ee
lea?f
我尝试编写一个期望得到相同输出的迭代器,但我得到一个 None 作为第一项返回:
class GenClass:
def __init__(self, numbers):
self.current = 0
self.numbers = numbers
def __iter__(self):
return self
def __next__(self):
next_value = self.current
if next_value >= len(self.numbers):
raise StopIteration
output = self.numbers[self.current]
self.current += 1
if "?" in output:
return output
genclass = GenClass(["trunk", "tr?ee", "+lea?f"])
for num in genclass:
print(num)
输出:
None
tr?ee
lea?f
我怎样才能得到tr?ee 和lea?f 而不是上面的?
另外,这个迭代器有意义还是我在这里滥用了迭代器?
【问题讨论】:
-
if "?" in output:如果没有......你返回None -
我的猜测是 next 仍然返回,您可能需要调用 self.__iter__ 才能跳转到下一个位置。类似的东西。
-
@juanpa.arrivillaga 我明白了。如何不返回无?
continue在这里不起作用。 -
while True: if something: return foo