问题标签 [yield-from]

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 投票
1 回答
329 浏览

python - 如何使用 os.scandir() 来取回空目录名和非空目录名

https://stackoverflow.com/a/33135143中,递归返回目录结构中所有文件名的解决方案如下所示。

我还需要有关目录结构中每个子目录的信息以及文件和目录的完整路径名。所以如果我有这个结构:

我会需要:

我如何必须从上述答案中更改解决方案才能实现这一目标?为了完整起见,下面给出答案:

0 投票
1 回答
112 浏览

python - 可以使用什么样的对象`yield from`?

最初(PEP 380),yield from引入语法以用于委托给“子生成器”。后来它与现在已弃用的基于生成器的协程一起使用。

我无法找出yield from一般可以应用于哪种对象。我的第一个猜想是它只需要__iter__对象上的方法来返回迭代器。事实上,以下适用于 Python 3.8:

但是,它也适用于一些asyncio.sleep(1)没有__iter__方法的等待对象,例如 。

一般规则是什么?是什么决定了一个对象是否可以作为yield from形式的参数给出?

0 投票
6 回答
311 浏览

python - 使用产量生成器从列表中删除连续重复项?

我正在尝试使用生成器压缩列表:

例子

我尝试使用生成器检查第一个和第二个元素是否相等,然后检查第二个和第三个等等,直到它不再相等“当它达到 4”然后产生“5”然后它会重复这个过程开始“4”

代码

但我一直在

生成器对象压缩在 0x00000254D383C820。为什么它不会循环?

如果我尝试使用 next() 它只会上升到 5 并且不会检查其他数字。

非常感谢任何帮助。

0 投票
2 回答
61 浏览

python - “来自”另一个生成器,但在处理之后

我们如何从另一个子生成器中产生,但要进行转换/处理?

例如:在下面的代码中,main_gen 使用 f(x) 转换后产生 x

这可以用yield from代替吗?如果可以,怎么做?

0 投票
1 回答
26 浏览

php - 同一功能的“产量”和“产量”

我需要使用yieldyield from相同的功能,但它似乎不能按预期工作,一旦它只产生最后一个yield fromyield(最后一个)。

我的代码是(https://3v4l.org/jFDXh):

对于所有 PHP 版本,它只会输出[ 7, 8, 9 ],但对我来说似乎很清楚它应该是[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

但是,如果我通过 a 做同样的foreach事情,一切似乎都很正常。看起来是与 相关的问题iterator_to_array(),但实际上我需要将它转换Generator为数组。

那么,我错过了什么?

0 投票
2 回答
414 浏览

python - 如何截取生成器的第一个值并透明地从其余值中产生

更新:我已经在 python-ideas 上启动了一个线程来为此目的提出额外的语法或 stdlib 函数(即指定发送的第一个值yield from)。到目前为止 0 回复... :/


如何截取子生成器的第一个产生的值,但将剩余的迭代委托给后者使用yield from

例如,假设我们有一个任意的双向生成器subgen,并且我们想将它包装在另一个生成器gen中。的目的gen是拦截第一个产生的值subgen并将生成的其余部分(包括发送的值、抛出的异常、.close() 等)委托给子生成器。

首先想到的可能是这样的:

但这是错误的,因为当调用者.send在获得第一个值后返回给生成器时,它最终会作为yield "intercepted"表达式的值,被忽略,而是作为第一个值g接收,作为语义的一部分的。None.sendyield from

所以我们可能会考虑这样做:

但是我们在这里所做的只是将问题向后移了一步:一旦我们调用g.send(received),生成器就会恢复执行并且不会停止,直到它到达下一个 yield 语句,其值成为.send调用的返回值. 所以我们还必须拦截并重新发送它。然后发送那个,然后再发送一次,依此类推......所以这行不通。

基本上,我要求的是一种yield from自定义发送到生成器的第一个值的方法:

...但不必重新实现yield from我自己的所有语义。也就是说,费力且维护性差的解决方案是:

这基本上是一个糟糕的重新实现yield from(它缺少对 , 等的处理throwclose。理想情况下,我想要一些更优雅、更少冗余的东西。

0 投票
1 回答
173 浏览

python - 如何使用产量和生成器函数将递归函数的输出保存到项目列表中

我有来自此链接的以下 XML 文件作为示例:

我有以下打印输出的递归函数:

下面的行打印结果:

输出:

我需要将输出保存到下面的项目列表中。

所以尝试了以下修改。但无法将结果作为列表。

我试图修改 print_level() 函数以提供一些可返回的输出而不是打印它,但不知道该怎么做。

将生成器更改为 list 给我相同的输出

我在其他链接中检查了类似的问题,但不太了解。

0 投票
1 回答
85 浏览

python - Recursing python dictionaries with yield from to generate list of nested dictionary keys

I want to generate a list of unique nested keys for each value in a dictionary such that:

I thought something along these lines would work, appending each key to a list and recursing until a value is reached. At which point I yield a list and carry on.

However when running, the result is all the unique keys

Think I must be missing something here on how yielding / input arguments work

0 投票
1 回答
62 浏览

python - 如何理解 python 协程中的“yield from”?

代码来自Fluent Python 第一版

我无法理解 中的行while True:grouper删除该行会引发StopIteration错误。

但我发现grouper没有while True:那个工作的新版本。为什么group.send(None)需要另一个循环while True:(或另一个results[key] = yield from averager())?

我的理解是group.send(None)将停止yield from averager()并分配results[key]一个值(Result(count, average))。就这样。

0 投票
1 回答
35 浏览

python-3.x - python中“Yield from”的透彻解释

再会!在过去的几天里,我一直在诚实地尝试消化 python“Yield from”语句的真相和工作原理……我对 Interables、Iterators、Generators 和 Yield 语句以及 Yield 语句的基本协程有了具体的理解一个表情……

但我似乎无法从...开始围绕 Yield ...

例子

大多数在线材料要么过于技术性,要么是 PEP 380 的直接引用。任何和所有帮助都将受到赞赏。提前致谢。