Python 中是否有一个函数,可以检查返回的值是否为 None,并且如果是,则允许你将其设置为另一个值,类似于 MySQL 中的 IFNULL
函数?
Python 中是否有一个函数,可以检查返回的值是否为 None,并且如果是,则允许你将其设置为另一个值,类似于 MySQL 中的 IFNULL
函数?
如果你想将所有“falsy”值(即None
,0
,""
,[]
,False
等)转换为特定的值,并让其他所有值不变,你可以使用or
。例如:
print (x or default_value)
如果 x
的值为真,它将打印出 x
的值;如果 x
的值为假,则打印出default_value
的值。
我之所以提到这一点,是因为在数据库中,IFNULL
经常用于清理布尔和数字列中的空值,因此可能是你或其他人想要的内容。显然,如果您想将 None
与 0
、False
等区分对待,那么这种方法就不起作用。
其实不行,因为你无法重新绑定参数。
if foo is None:
foo = 42
或者def ifnull(var, val):
if var is None:
return val
return var
foo = ifnull(foo, 42)
ifnull()
的语句体可以简写为val if var is None else var
。 - S.Lottreturn var or val
。 - Ionut Hulub像这样:
x = SOME_VALUE if x is None else x
nvl(v1,v2)
会返回 v1
,如果不为 null,则返回 v2
。
nvl = lambda a,b: a or b
a
也可以是 0
或 []
或 {}
或 ()
或 ''
。对于所有这些情况,都将返回 b
。 - TrueYdef d_nvl(d,key,default_val):
try:
return d[key]
except Exception:
return default_val
它的使用方式如下:
my_val = d_nvl(my_dict,'my_key','default_val')
来自MySQL:
nvl(foo, bar) [or even nvl2(foo, baz, bar) in Oracle]
在lambda函数中使用Python三元运算符(详见此处):
nvl = lambda foo, bar: bar if foo is None else foo
nvl2 = lambda foo, baz, bar: bar if foo is None else baz
foo = nvl(foo, 42) # returns 42 if foo is null
foo = nvl2(foo, 7, 42) # returns 42 if foo is null or 7 is foo is not null
我正在使用SQL Oracle,它有NVL()函数可以替换null。例如,NVL(null,1)返回1,NVL(3,1)返回3。相应的Python函数为:
import numpy as np
nvl = lambda a,b: b if np.isnan(a) else a
nvl(3,1)
>>> 3
nvl(np.nan,1)
>>> 1
由于这个问题已经超过2年了,我猜这更多是为了未来的参考 :)
我喜欢做的是 max('', mightBeNoneVar)
或者 max(0, mightBeNoneVar)
(取决于上下文)。
更详细的例子:
print max('', col1).ljust(width1) + ' ==> '+ max('', col2).ljust(width2)
NoneType
不可排序,因此会出现TypeError
。 - Jon Clements
False
。只有零是False
。 - Anonymous