36

在 python 中,如何编写一个多行的 lambda 函数。我试过

d = lambda x: if x:
                 return 1
              else 
                 return 2

但我收到错误...

4

3 回答 3

52

改为使用def

def d(x):
    if x:
        return 1
    else:
        return 2

所有 python 函数都是一阶对象(它们可以作为参数传递),lambda只是制作短函数的一种方便方法。一般来说,如果一个普通的函数定义超出了一行简单的代码,你最好使用它。

即使那样,事实上,如果你将它分配给一个名字,我总是会使用defover lambda。在定义短函数lambda时确实是一个好主意,例如,用于与 一起使用,因为它们可以内嵌到函数调用中。keysorted()

请注意,在您的情况下,三元运算符会完成这项工作(lambda x: 1 if x else 2),但我假设这是一个简化的情况。

(作为代码高尔夫球笔记,这也可以用更少的代码来完成lambda x: bool(x)+1- 当然,这是非常不可读的,也是一个坏主意。)

于 2013-02-12T23:26:34.177 回答
21

lambdaPython中的构造仅限于表达式,不允许使用任何语句

在保持上述约束的同时,您当然可以使用反斜杠 char 编写包含多行的表达式:

>>> fn = lambda x: 1 if x \
                     else 2
>>> fn(True)
>>> 1
>>> fn(False)
>>> 2
于 2013-02-12T23:45:06.537 回答
-1

这是您尝试执行的正确版本:

d = lambda x: 1 if x else 2

但我不确定你为什么要这样做。

于 2013-02-12T23:28:22.227 回答