gpt4 book ai didi

python - 当 Python yield 语句没有表达式时会发生什么?

转载 作者:太空狗 更新时间:2023-10-29 20:51:53 26 4
gpt4 key购买 nike

我是一名试图理解一些 Python 代码的 C# 程序员。有问题的代码是一个生成器函数,看起来像这样:

def func():
oldValue = curValue
yield
curValue = oldValue

如果我理解正确,这将生成一个包含一个成员的可迭代序列。但是,yield 语句后没有表达式。这样一个没有表达式的语句应该产生什么?有没有使用这种编码方式的 Python 习语?

最佳答案

它将产生None;就像一个空的 return 表达式会:

>>> def func():
... yield
...
>>> f = func()
>>> next(f) is None
True

您可以使用它来暂停代码yield 之前的所有内容在您首次调用生成器上的 next() 时运行,yield 之后的所有内容仅在您调用 时运行>next() 再次:

>>> def func():
... print("Run this first for a while")
... yield
... print("Run this last, but only when we want it to")
...
>>> f = func()
>>> next(f, None)
Run this first for a while
>>> next(f, None)
Run this last, but only when we want it to

我使用了 next() 的双参数形式来忽略抛出的 StopIteration 异常。上面的代码不关心 yield 是什么,只关心函数在那一点暂停。

举个实际例子,@contextlib.contextmanager decorator完全希望您以这种方式使用 yield;您可以可选 yield 一个对象以在with ... as 目标中使用。重点是进入上下文时运行 yield 之前的所有内容,退出上下文时运行之后的所有内容。

关于python - 当 Python yield 语句没有表达式时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22960397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com