TLDR:
我们可以在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
这看起来像是,它希望某个操作数是未写入的返回语句的正确操作数,但却发现yeild
并感到困惑。
有没有一个正确的合法方法来实现这个循环?
旁注:yield
可以是语句/表达式,具体取决于您问谁:yield - statement or expression?
最终答案:产量可以与lambda一起使用,但限制(单行)使其无用。for/while
在lambda中不可能,因为它们不是表达式。-user2357112隐式for循环在列表理解中是可能的,而yield在列表理解中是有效的。-wim
结论-显式循环不可能,因为python中的lambda只能包含表达式,要编写显式循环,您需要使用语句。-wim
实际上,您可以以有用的方式循环lambda,只是您提供的示例不是一个很好的用例。
您可能希望在
lambda
中使用yield
的一个实例可能是仅在需要时才惰性地执行昂贵的函数。就像这样:*注意,这个语法在Python3.8中仍然有效,因为它没有在理解中使用
yield
。如果您可以用生成器重写
lambda
内部的yield
是否有必要?在lambda中,您试图创建的一行代码实际上在技术上是可行的,您只需要进一步帮助解析器:
这在列表理解中隐式地使用for循环。在理解之外使用显式的
while
循环或for
循环是不可能的。这是因为python中的lambdas只能包含expressions,要编写显式循环,需要使用statements。Note: this syntax is deprecated in Python 3.7, and will raise ^{} in Python 3.8
相关问题 更多 >
编程相关推荐