python - 使用 send 将值传递给 yield

标签 python python-2.7 yield

当我在谷歌上搜索 python yield 时,我发现了一些有趣的东西,而且我以前不知道,即我们可以将值传递给 yield 以更改 next() 值。我希望一些新的 pythonist 现在可能意识到这一点,但我也不确定它是如何工作的。所以,如果有人可以解释它是如何工作的,以及当我使用 send() 发送新索引以产生时行为如何变化。

这是我的片段:

def print_me (count):
    i = 0
    while i < count:
        val = (yield i)
        if val is not None:
            i = val
        else:
            i += 1

gen = print_me(10)

for i in gen:
   if i == 5:
       gen.send(8)
   else:
       print i

这是我的输出:

0
1
2
3
4
9

最佳答案

您的测试代码实际上很有指导意义。在这样的生成器函数中发生的事情是,每当您在生成器上调用 next 时,代码都会执行,直到它遇到 yield 语句。产生该值,然后在生成器中执行“暂停”。如果你.send生成器的一些数据,该值从 yield返回。如果您不.send任何东西,yield 返回None

所以在您的代码中,当您.send(8) 时,它会在您的生成器中设置val = 8(val = yield i).因为 val 不是 Nonei 被设置为 8.send 实际上一直执行到下一个 yield 语句(返回该值 -- 8)。然后事情恢复正常(下一个要生成的数字是 9)。

关于python - 使用 send 将值传递给 yield,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20579756/

相关文章:

Python Scipy 优化 curve_fit

python - 在 Python 中,如何在不翻译单个字符的情况下进行多重替换?

python - 无法使用 Pip 安装任何包

scala - 使用 Scala 延续实现 yield ( yield 返回)

ruby - 返回 Ruby 中对象的 yield 的方法

python - 如何让别人使用我的 Python 脚本

python - 如何使rpm模块与(非系统)Python2.7一起工作

python - 如何使用 to_sql 创建表时强制使用 utf8mb4?

python-2.7 - Aws Boto3 客户端(低级)与资源(高级)

python - Python中的yield表达式的结果是什么?