【发布时间】:2015-10-03 02:46:59
【问题描述】:
我使用iter 和两个参数,想知道是否有一个等效的可以接受更复杂的哨兵?
例如,在下面的代码中
# returns digits 1 to 10 upon subsequently calling .create(),
# then returns 'END' each time afterwards
class MyClass:
def __init__(self):
self.counter = 0
def create(self):
self.counter += 1
if self.counter > 10:
return 'END'
else:
return self.counter
c = MyClass()
for i in iter(c.create, 'END'):
print(i)
迭代在获得'END' 时结束。我希望在总共获得两个'END' 之后结束它(不一定一个接一个 - 上面的代码在前十个调用之后只会生成'END',但可以想象它们的情况与其他值交错)。
本质上,我在寻找一种使用更复杂哨兵的方法。有这样的概念吗?
我知道我可以求助于previous question 中提到的明显但丑陋的代码,但是@HappyLeapSecond 的答案是如此优雅,我想保持这种精神(我去了itertools,但没有可用的方法似乎完成了这项工作)
【问题讨论】: