我推理的缺陷在哪里?从我的理解产量类似于返回到生成器继续迭代的返回语句。我期待代码继续添加到列表中但我收到错误。
def method(self):
samplelist = []
while(condition):
#the data is collected
samplelist = data
yield samplelist
finalList += file.method()
编辑: 我的初始错误是由于尝试使用+ =连接finalList,因为它没有初始值。这是通过使用finalList.append()来解决的,但是,产量仍然无法正常工作,如果有人能帮助我理解原因,我将非常感激。
发布了一个相当有用的答案,然后由于某种原因删除了。但它解释说,收益率确实是一个发电机对象。从这开始我尝试了一些不同的东西。
1他们还建议使用list(file.method())来迭代它。然而,这进一步将finalList的类型更改为元组,并且与我的其余代码不兼容。
2我试图迭代对象做
for x in file_writer.write_records():
sample.append(x)
但结果相同。如何附加生成器对象的值?
答案 0 :(得分:1)
我将忽略显而易见的事实,即file.method()
未在您发布的代码中声明,因此无法在您显示时调用。所以我将你的生成器函数称为method()
。如果您可以发布有效或至少一致的代码,那将非常有用。
method()
返回生成器,而不是列表。你可以通过
>>> method()
<generator object f at 0x7f8b7a5bda50
您需要解析生成器。这可以通过调用list()
来完成:
finalList += list(method())
现在finalList
会附加method()
的结果。请注意,这将多次调用生成器,直到满足condition
。生成新数据时,您的代码似乎会挂起,但这样做完成了。您可以通过在yield之后添加print语句来检查这一点,以查看返回到生成器的控件。
这对您更有用:
for l in method():
finalList.extend(l)
# process finalList....
现在,在生成每个数据后,控制权将返回到调用代码,并且调用代码有机会对其进行处理。
顺便说一句,在循环中重新绑定它时,不需要初始化samplelist = []
。