gpt4 book ai didi

Python 迭代器追加逻辑

转载 作者:太空宇宙 更新时间:2023-11-04 05:39:35 26 4
gpt4 key购买 nike

我正在尝试编写一个迭代器类来处理数据,然后将数据附加到可迭代对象中,例如

def processor2(data, append):
for chunk in data:
yield chunk
yield append

然而我的类(class)比我预期的要复杂一些:

class processor(object):
def __init__(self, data, append):
self.finished = False
self.data = data
self.append = append

def __iter__(self):
return self

def next(self):
if self.finished:
raise StopIteration

try:
return next(self.data)
except StopIteration as e:
self.finished = True
return self.append

def __next__(self):
return self.next()

生成器中的第二个 yield 语句很好且可读,但是使用 self.finished = True 等的解决方案。对我来说似乎很麻烦和不透明。有没有更好的方法在迭代器类中创建这种行为?

目前,两种实现的工作方式相同:

data = iter(['a', 'b', 'c'])
for i in data:
print i

data = iter(['x', 'y', 'z'])
for i in processor(data, "foo"):
print i

data = iter(['x', 'y', 'z'])
for i in processor2(data, "foo"):
print i

最佳答案

你写的实际上是你正在尝试做的事情的规范实现。没有什么可以改进的,除了一些小细节。

可能有等效的方法(例如使用 Padraic 提出的哨兵),但核心方法保持不变:您将始终需要一个完成标志。

请注意,从某种角度来看,您的类与生成器函数完全相同:在生成器函数中,行号扮演着完成标志的角色。

关于Python 迭代器追加逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34453892/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com