gpt4 book ai didi

python - 产量(x)与(产量(x)): parentheses around yield in python

转载 作者:太空狗 更新时间:2023-10-29 22:21:30 27 4
gpt4 key购买 nike

使用 Python 3.4,我在此处得到 SyntaxError: invalid syntax:

>>> xlist = [1,2,3,4,5]
>>> [yield(x) for x in xlist]
SyntaxError: invalid syntax

但这会生成一个生成器对象:

>>> [(yield(x)) for x in xlist]
<generator object <listcomp> at 0x00000076CC8E5DB0>

是否需要在 yield 周围加上圆括号?

最佳答案

yield keyword可以以两种方式使用:作为语句和作为表达式。

最常见的用法是作为生成器函数中的语句,通常单独一行。可以这样使用:

yield <expr>
yield from <expr>

然而,yield 表达式可以用在任何允许表达式的地方。但是,它们需要特殊的语法:

(yield <expr>)
(yield from <expr>)

如您所见,括号是使 yield 用作表达式的语法的一部分。所以语法上不允许使用 yield 关键字作为不带括号的表达式。这就是为什么您需要在列表理解中使用括号。

话虽这么说,如果您想使用列表理解语法来创建生成器,您应该改用生成器表达式语法:

(x for x in xlist)

请注意圆括号而不是方括号,以将其从列表推导式转换为生成器表达式。


请注意 starting with Python 3.7 , yield 表达式在理解和生成器表达式中被弃用(除了最左边的 for 子句的迭代),以确保正确评估理解。从 Python 3.8 开始,这将导致语法错误。

这使得问题中的精确列表理解成为弃用的用法:

>>> [(yield(x)) for x in xlist]
<stdin>:1: DeprecationWarning: 'yield' inside list comprehension
<generator object <listcomp> at 0x000002E06BC1F1B0>

关于python - 产量(x)与(产量(x)): parentheses around yield in python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37845338/

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