如何用多行编写python lambda?

时间:2013-02-12 23:25:48

标签: python lambda

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

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

但我收到错误......

3 个答案:

答案 0 :(得分:21)

改为使用def

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

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

即便如此,事实上,如果您将其分配给某个名称,我会始终使用def而不是lambdalambda在定义短key函数时非常有用,例如,与sorted()一起使用,因为它们可以内联到函数调用中。

请注意,在您的情况下,三元运算符可以完成工作(lambda x: 1 if x else 2),但我认为这是一个简化的案例。

(作为代码高尔夫球注释,这也可以用更少的代码完成lambda x: bool(x)+1 - 当然,这是非常难以理解的,也是一个坏主意。)

答案 1 :(得分:7)

Python中的

lambda构造是limited to an expression only,不允许任何语句

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

>>> fn = lambda x: 1 if x \
                     else 2
>>> fn(True)
>>> 1
>>> fn(False)
>>> 2

答案 2 :(得分:4)

以下是您尝试执行的操作的正确版本:

d = lambda x: 1 if x else 2

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