Python lambda 返回 None 而非空字符串
我有一个这样的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