geo*_*org 6 python iterator stopiteration
什么是最后一次从迭代器返回一些东西的好方法,当它耗尽时.我正在使用旗帜,但这很难看:
class Example():
def __iter__(self):
self.lst = [1,2,3]
self.stop = False # <-- ugly
return self
def next(self):
if self.stop: # <-- ugly
raise StopIteration
if len(self.lst) == 0:
self.stop = True
return "one last time"
return self.lst.pop()
Run Code Online (Sandbox Code Playgroud)
背景:我从外部源获取未知数量的字符串,并将它们进一步发送给调用者.当进程结束时,我想发出一个字符串"x records processed".我无法控制调用代码,所以这必须在我的迭代器中完成.
您可以__iter__从中将其转换为生成器函数(或者您可以按照Dan的建议编写生成器函数).正如警告一样,这可能会误导滥用该next方法的人.
class Example():
def __iter__(self):
lst = [1,2,3]
for i in reversed(lst):
yield i
yield "one last time"
Run Code Online (Sandbox Code Playgroud)
也许您可以使用生成器函数:
def example():
lst = [1, 2, 3]
while lst:
yield lst.pop()
yield 'one last time'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4754 次 |
| 最近记录: |