Python相当于MySQL的IFNULL

时间:2011-05-13 04:54:03

标签: python

Python中是否有一个函数检查返回的值是否为None,如果是,是否允许您将其设置为另一个值,如MySQL中的IFNULL函数?

8 个答案:

答案 0 :(得分:12)

如果您要将所有“假”值(即None0""[]False等)转换为具体的价值,让其他一切都不受影响,你可以使用or。例如:

print (x or default_value)

将打印x的值(如果它是真实的),default_value的值如果x是假的。

我提到这一点是因为IFNULL通常以这种方式用于清理数据库中布尔值和数字列中的空值,因此可能是您或其他人所追求的。显然,如果您想以None0等方式对待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)