问题标签 [generator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
47 回答
2829514 浏览

python - “yield”关键字有什么作用?

yieldPython中关键字的用途是什么?它有什么作用?

例如,我试图理解这段代码1

这是调用者:

调用方法时会发生什么_get_child_candidates?是否返回列表?单一元素?又叫了吗?后续调用何时停止?


1. 这段代码由 Jochen Schulz (jrschulz) 编写,他为度量空间制作了一个很棒的 Python 库。这是完整源代码的链接:Module mspace
0 投票
2 回答
784 浏览

ruby-on-rails - Rails 生成器 m.directory 返回无法将 nil 转换为 String

我已经编写了这个生成器代码,但是当我在清单中调用 m.directory 时它返回“无法将 nil 转换为字符串”。有谁知道发生了什么?

结尾

0 投票
10 回答
19268 浏览

python - 什么时候不适合使用 python 生成器?

这与您可以使用 Python 生成器函数做什么?: python 生成器、生成器表达式和itertools模块是我最近最喜欢的 python 功能。它们在设置操作链以对大量数据执行时特别有用——我经常在处理 DSV 文件时使用它们。

那么什么时候适合使用生成器、生成器表达式或itertools函数呢?

  • 我应该什么时候更喜欢zip()itertools.izip()或者
  • range()超过xrange(), 或
  • [x for x in foo]结束了(x for x in foo)

显然,我们最终需要将生成器“解析”为实际数据,通常是通过创建一个列表或使用非生成器循环对其进行迭代。有时我们只需要知道长度。这不是我要问的。

我们使用生成器,这样我们就不会为临时数据分配新列表到内存中。这对于大型数据集尤其有意义。它对小型数据集也有意义吗?是否存在明显的内存/cpu 权衡?

鉴于列表理解性能与 map() 和 filter()的令人大开眼界的讨论,如果有人对此进行了一些分析,我特别感兴趣。(替代链接

0 投票
3 回答
34979 浏览

python - Python:使用递归算法作为生成器

最近我写了一个函数来生成具有非平凡约束的某些序列。问题来自一个自然的递归解决方案。现在碰巧的是,即使对于相对较小的输入,序列也是数千个,因此我更愿意使用我的算法作为生成器,而不是使用它来填充所有序列的列表。

这是一个例子。假设我们想用递归函数计算一个字符串的所有排列。以下朴素算法采用额外的参数“存储”,并在找到时附加一个排列:

(请不要在意效率低下,这只是一个例子。)

现在我想把我的函数变成一个生成器,即产生一个排列而不是将它附加到存储列表中:

此代码不起作用该函数的行为类似于一个空生成器)。

我错过了什么吗?有没有办法将上述递归算法变成生成器而不用迭代算法替换它

0 投票
7 回答
6738 浏览

.net - .NET 名称生成器

有没有人写过或知道一个库,可以生成相当准确的西欧风格名称?即 John、Susan、Smith、Julien、April 等,等等……

0 投票
5 回答
84933 浏览

python - 如何从生成器构建 numpy 数组?

如何从生成器对象中构建一个 numpy 数组?

让我来说明问题:

在这种情况下,gimme()是我想将其输出转换为数组的生成器。但是,数组构造函数不会遍历生成器,它只是存储生成器本身。我想要的行为是 from numpy.array(list(gimme())),但我不想支付同时在内存中拥有中间列表和最终数组的内存开销。有没有更节省空间的方法?

0 投票
2 回答
151 浏览

c - Yacc 问题:使数据在下一个非终端中可用

我想让我在 b 中生成的一些变量在 c 中可用:

一个简单的例子:

所以我可以,稍后在 c 中说:

有没有机会这样做?任何帮助将不胜感激!

0 投票
9 回答
101412 浏览

python - 发电机输出长度

Python 提供了一种很好的方法来获取急切迭代的长度,len(x)即。但是对于由生成器理解和函数表示的惰性迭代,我找不到任何类似的东西。当然,写这样的东西并不难:

但我无法摆脱我正在重新实现自行车的感觉。

(当我输入函数时,我突然想到:也许真的没有这样的函数,因为它“破坏”了它的论点。不过,这对我来说不是问题)。

PS:关于第一个答案 - 是的,类似的东西len(list(x))也可以,但这会大大增加内存的使用。

PPS:重新检查...忽略PS,似乎我在尝试时犯了一个错误,它工作正常。抱歉,添麻烦了。

0 投票
3 回答
1593 浏览

.net - 如何使用生成器遍历树结构?

我试图弄清楚如何在树节点中实现一个函数,该函数返回其所有后代叶子(无论是直接的还是间接的)。但是,我不想传递将递归放置叶节点的容器(树可能很大),而是我想使用生成器来遍历树。我尝试了几种方法,但到目前为止没有一种方法有效。这是我最接近可能的解决方案的一个:

但这也不起作用。我究竟做错了什么?如果同一个函数中有一个 yield 语句,似乎递归调用 .EnumerateLeaves 将不起作用。

任何帮助将不胜感激。提前致谢。

编辑:我忘了提到一个分支可以有叶子或分支作为孩子,因此递归。

0 投票
2 回答
3397 浏览

nhibernate - 如何使用 NHibernate 和 Firebird 生成 id?

我正在尝试使用 NHibernate 将一些新对象插入到 firebird 数据库中。

我收到错误“无法获取下一个序列值 [SQL:SQL 不可用]”

这是我目前使用的映射。注意 ANML_EVNT 是我要使用的生成器的名称。