Python中是否有一个函数检查返回的值是否为None,如果是,是否允许您将其设置为另一个值,如MySQL中的IFNULL
函数?
答案 0 :(得分:12)
如果您要将所有“假”值(即None
,0
,""
,[]
,False
等)转换为具体的价值,让其他一切都不受影响,你可以使用or
。例如:
print (x or default_value)
将打印x
的值(如果它是真实的),default_value
的值如果x
是假的。
我提到这一点是因为IFNULL
通常以这种方式用于清理数据库中布尔值和数字列中的空值,因此可能是您或其他人所追求的。显然,如果您想以None
,0
等方式对待False
,则无效。
答案 1 :(得分:8)
不是真的,因为你不能重新绑定论点。
if foo is None:
foo = 42
或
def ifnull(var, val):
if var is None:
return val
return var
foo = ifnull(foo, 42)
答案 2 :(得分:5)
像这样:
x = SOME_VALUE if x is None else x
答案 3 :(得分:0)
nvl(v1,v2)
将返回v1
,否则返回v2
。
nvl = lambda a,b:a或b
答案 4 :(得分:0)
从MySQL:
nvl(foo, bar) [or even nvl2(foo, baz, bar) in Oracle]
在lambda函数中使用Python三元运算符(请参见详细说明here),如下所示:
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
答案 5 :(得分:0)
我们做了这个:
def 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')
答案 6 :(得分:-1)
我使用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
答案 7 :(得分:-2)
由于这个问题已经超过2年了,我想这更适合将来的参考:)
我喜欢做的是max('', mightBeNoneVar)
或max(0, mightBeNoneVar)
(取决于具体情况)。
更详细的例子:
print max('', col1).ljust(width1) + ' ==> '+ max('', col2).ljust(width2)