将列表与收益率连接

约翰·史密斯

我的推理的缺陷在哪里?根据我的理解,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)

但结果相同。如何附加生成器对象的值?

姆霍克

我将忽略一个显而易见的事实,即file.method()您的已发布代码中未声明该声明,因此无法如您所展示的那样调用它。因此,我将您的生成器功能称为method()如果您可以发布有效或至少一致的代码,这将很有用。

method()返回一个生成器,而不是一个列表。你可以看到这个

>>> method()
<generator object f at 0x7f8b7a5bda50

您需要解决生成器。可以通过调用list()来完成

finalList += list(method())

现在finalList将结果method()附加到它。请注意,这将多次调用生成器,直到condition满足为止生成新数据时,您的代码似乎挂起,但是这样做已经完成。您可以通过在yield之后添加打印语句来检查此情况,以查看控件已返回到生成器。

这对您将更有用:

for l in method():
    finalList.extend(l)
    # process finalList....

现在,在生成每个数据之后,控制权将返回到调用代码,并且调用代码有机会对其进行处理。

顺便说一句,您不需要samplelist = []在循环中重新绑定它时进行初始化

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

收益率无效,但收益率有效

来自分类Dev

ES6收益率(收益率1)(收益率2)(收益率3)()

来自分类Dev

收益率IEnumerable <IEnumerable <... >>

来自分类Dev

收益率-内存优化

来自分类Dev

Ruby Blocks(收益率)

来自分类Dev

在此示例中,为什么“收益率”和“收益率收益率”具有相同的行为?

来自分类Dev

在此示例中,为什么“收益率”和“收益率收益率”具有相同的行为?

来自分类Dev

Scala的未来内部收益率

来自分类Dev

更紧凑的“收益率回报”方法?

来自分类Dev

IEnumerator收益率返回类型错误

来自分类Dev

使用收益率而不返回类型

来自分类Dev

PHP收益率,奇怪的行为

来自分类Dev

收益率可重入吗?

来自分类Dev

OpenCV 3.1 ANN预测收益率

来自分类Dev

瓦拉收益率未恢复

来自分类Dev

IEnumerator收益率返回类型错误

来自分类Dev

收益率怪异行为

来自分类Dev

使用收益率而不返回类型

来自分类Dev

执行收益率返回后的代码

来自分类Dev

R中的收益率曲线排序

来自分类Dev

延迟评估收益率值

来自分类Dev

熊猫年化收益率

来自分类Dev

将Y轴按Waseca的总和(收益率)降序排列

来自分类Dev

如何将收益率应用于递归函数

来自分类Dev

将Y轴按Waseca的总和(收益率)降序排列

来自分类Dev

收益率回报与LINQ Select之间的结果不同

来自分类Dev

修改收益率的返回值

来自分类Dev

RSpec:如何测试收益率自我

来自分类Dev

Clojure是否具有等于C#的收益率?