如何编写多行的Python lambda?

84 投票
3 回答
133407 浏览
提问于 2025-04-17 15:41

在Python中,怎么写一个可以包含多行的lambda函数呢?我试过这样写

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

但是我遇到了错误...

3 个回答

-10

这是你想做的事情的一个正确版本:

d = lambda x: 1 if x else 2

不过我不太明白你为什么想这么做。

47

在Python中,lambda构造只允许写成一个表达式,不能包含任何语句。

尽管有这个限制,你还是可以通过使用反斜杠字符来写一个多行的表达式,当然:

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

def 来定义函数会更好。

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

在Python中,所有的函数都是一等公民(也就是说,它们可以作为参数传递),而 lambda 只是一个方便的方式来创建短小的函数。一般来说,如果你的函数代码超过一行简单的代码,使用正常的函数定义会更好。

即使在这种情况下,如果你要给函数起个名字,我也总是建议用 def 而不是 lambda。其实 lambda 主要适合用来定义短小的 key 函数,比如在使用 sorted() 函数时,因为它们可以直接放在函数调用里。

需要注意的是,在你的例子中,三元运算符也可以完成这个任务(lambda x: 1 if x else 2),但我猜这只是一个简化的例子。

(作为一个代码简化的提示,这个也可以用更少的代码写成 lambda x: bool(x)+1 - 当然,这样写会非常难以阅读,是个坏主意。)

撰写回答