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 - 语句或表达式?
最终答案: yield 可以与 lambda 一起使用,但限制(单行)使其无用。 for/while
在 lambda 中不可能,因为它们不是表达式。 -user2357112 隐式 for 循环可以通过列表理解实现,并且 yield 在列表理解内有效。 - 维姆
判决- 显式循环是不可能的,因为 python 中的 lambda 只能包含表达式,要编写显式循环,您将需要使用语句。 -wim
原文由 theMobDog 发布,翻译遵循 CC BY-SA 4.0 许可协议
您似乎试图创建的单行代码实际上在技术上可以通过 lambda 实现,您只需要为解析器提供更多帮助:
这在列表理解中隐式使用了一个 for 循环。在理解之外使用显式
while
循环或for
循环是不可能的。那是因为 python 中的 lambda 只能包含 表达式,要编写显式循环,您将需要使用 语句。注意:此语法在 Python 3.7 中已弃用,并将在 Python 3.8 中引发
SyntaxError