如何编写多行的Python lambda?
在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
- 当然,这样写会非常难以阅读,是个坏主意。)