【发布时间】:2014-06-25 13:50:35
【问题描述】:
我的推理缺陷在哪里?根据我的理解,yield 的工作方式类似于返回到生成器以继续迭代的 return 语句。我期待代码继续添加到列表中,但出现错误。
def method(self):
samplelist = []
while(condition):
#the data is collected
samplelist = data
yield samplelist
finalList += file.method()
编辑: 我最初的错误是由于在没有初始化值时尝试使用 += 连接 finalList 。这已通过使用 finalList.append() 解决,但是,yield 仍然无法正常工作,如果有人能帮助我理解原因,我将不胜感激。
发布了一个相当有用的答案,然后由于某种原因被删除。但它解释说,yield 实际上是返回一个生成器对象。从这里我尝试了一些不同的东西。
1 他们还建议使用 list(file.method()) 对其进行迭代。但是,这进一步将 finalList 的类型更改为元组,并且与我的其余代码不兼容。
2 我试图迭代对象做
for x in file_writer.write_records():
sample.append(x)
但结果相同。如何附加生成器对象的值?
【问题讨论】:
-
你的问题是方法是在被调用之后定义的,也许?
-
注意
method的返回值不是一个列表,它是一个生成器对象。如果您想访问产生的项目,您必须使用for循环对其进行迭代,或者在生成器上调用next,或者将其转换为列表。 -
@Kevin OP 不想访问这些项目,他想将它们添加到列表中。
list的__iadd__和extend方法可以处理迭代器。 -
@sshashank124 " UnboundLocalError: local variable 'finalList' referenced before assignment " ,这对我来说真的没有意义,因为如果我在 method() 中将 samplelist 连接到本地的另一个变量并返回该变量分配给 finalList 它工作正常。
-
@JohnSmith 您目前显示的代码中没有变量
sample,所以没有人能真正回答您的问题。
标签: python list concatenation yield