我在做这个号码。到目前为止,不是很好
class multifilter:
def judge_half(pos, neg):
return pos >= neg
def judge_any(pos, neg):
return pos >= 1
def judge_all(pos, neg):
return neg == 0
def __init__(self, iterable, *funcs, judge=judge_any):
self.l = iterable
self.f = funcs
self.judge = judge
self.i = 0
def __iter__(self):
return self
def __next__(self):
pos, neg = 0, 0
if self.i >= len(self.l) - 1:
raise StopIteration
for i in self.f:
if i(self.l[self.i]) == True:
pos += 1
else:
neg += 1
if self.judge(pos, neg) == True:
self.i += 1
return next(self)
else:
self.i += 1
return self.l[self.i]
但它给出了:过滤器无法正常工作。我很可能没有正确理解迭代器的原理。这就是我的想法:当我写 时,for i in multifilter(iterable, funcs, judge_any):我写for i in iter(multifilter(iterable, *funcs, judge_any))和 在循环的每一次传递中,next(). 但是当我写作时会发生什么list(multifilter(iterable, funcs, judge_any))?告诉我一些要阅读或查看迭代器的内容。只是没有哈布尔!他们的抽象类只会让我感到困惑
PS我知道我被要求在上面实现它yeld,但是在我学习基础知识之前,我不想爬到野外
一个有趣的谜...
并尝试这样:
我们试着: