Python lambda 返回 None 而非空字符串

12 投票
6 回答
28054 浏览
提问于 2025-04-15 21:12

我有一个这样的lambda函数:

f = lambda x: x == None and '' or x

这个函数应该在接收到None作为参数时返回一个空字符串,如果参数不是None,就返回这个参数。

举个例子:

>>> f(4)
4
>>> f(None)
>>>

当我调用f(None)时,我本来应该得到一个空字符串,但我却得到了None。我打印了函数返回值的类型,结果是NoneType。我原本期待的是字符串类型。

type('')返回的是字符串,所以我想知道为什么当我传入None作为参数时,lambda函数没有返回一个空字符串。

我对lambda函数还比较陌生,可能对它的工作原理有些误解。

6 个回答

4

问题在于,Python把空字符串当作假值(False)来处理。当你把None传给你的函数时,它会被计算成:

None == None and '' or None

这实际上变成了:

True and False or None

然后:

False or None

最后:

None

一个解决方案是:

lambda x: x if x is not None else ''

如果你知道x要么是一个字符串,要么是None,那么你可以利用None在Python中也是一个假值的这个特点:

lambda x: x or ''
8

在你的情况下,空字符串 '' 被认为是布尔值的假,也就是 False。你可以这样理解:bool('') 的结果是 False。

你可以使用下面的代码来解决这个问题:

f =lambda x:x if x is not None else ''
27

使用if else结构

f = lambda x:'' if x is None else x

撰写回答