我找到了这个页面:
http://effbot.org/pyfaq/why-can-t-lambda-forms-contain-statements.htm
尽管如此,原因尚不清楚。 Lambdas是强大的,在我看来,如果可以在其范围内使用陈述/作业,它们会更多。
例如:
y = 0
f = lambda x: y = 5, x+y # Statements first, expression later.
print f(5) # 10
有人必须考虑到这一点,并且必须有一个原因,为什么它没有实现(也许是为了避免使用它们而不是一个简单的def?)。
答案 0 :(得分:3)
首先需要了解lambda
构造创建一个表达式,它会计算到创建的函数。这与作为语句的def
非常不同,并且通过将创建的函数绑定到指定名称的副作用起作用。要使lambda
有用,必须才能成为表达式,否则您无法将其嵌套在其他表达式中。
正如链接的FAQ解释的那样,不允许其他Python表达式嵌套语句。这是因为Python语言的核心语法权衡排除了这种可能性,如persuasively argued by Guido。由于有一个非常简单的解决方法,即使用def
,因此在lambda
中使用语言的语法来容纳语句是不值得的。
另请注意,lambda
并不是语言中唯一需要表达式的地方。您不能在if
或while
的测试中输入语句,也不能在for
语句所要求的表达式中输入语句。然而,这被认为是一件好事 - 如果你需要语句,只需将它们提取到函数中并调用它即可。完全相同的情况适用于lambda
。
答案 1 :(得分:0)
有什么不同:
f = lambda x: y = 5; x+y
和
def f(x):
y = 5
return x+y
后者更具可读性,它具有一致的语法,并且您需要编写的唯一代码比使用lambda定义的return
更多。因此,您不需要提出建议,只需要更复杂的规则。