gpt4 book ai didi

python: lambda、yield-statement/expression 和循环(澄清)

转载 作者:IT老高 更新时间:2023-10-28 21:10:11 28 4
gpt4 key购买 nike

TL;DR: 我们可以在 lambda 中实现 yield 或生成器语句(带有循环)吗?

我的问题是澄清:

是否可以用yield实现下面的简单循环功能

def loopyield():
for x in range(0,15):
yield x
print(*loopyield())

导致错误:

lamyield=lambda x: yield x for x in range(0,15)
^
SyntaxError: invalid syntax

看起来,它期望某些东西作为未写入的 return 语句的正确操作数,但发现 yield 并感到困惑。

是否有适当的合法方式来循环实现这一目标?

旁注:yield 可以是语句/表达式,具体取决于您询问的对象:yield - statement or expression?

最终答案: yield 可以与 lambda 一起使用,但限制(单行)使其无用。 for/while 在 lambda 中是不可能的,因为它们不是表达式。 -user2357112 隐式 for 循环可以使用列表推导,并且 yield 在列表推导中有效。 -wim

Verdict- 无法使用显式循环,因为 Python 中的 lambda 只能包含表达式,要编写显式循环,您需要使用语句。 -wim

最佳答案

您似乎尝试创建的单行在技术上实际上可以使用 lambda,您只需要更多地帮助解析器:

>>> lamyield = lambda: [(yield x) for x in range(15)]
>>> print(*lamyield())
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

这在列表推导中隐式使用了 for 循环。在理解之外使用显式 while 循环或 for 循环是不可能的。那是因为 python 中的 lambdas 只能包含 expressions ,并且要编写显式循环,您需要使用 statements .

Note: this syntax is deprecated in Python 3.7, and will raise SyntaxError in Python 3.8

关于python: lambda、yield-statement/expression 和循环(澄清),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40594754/

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