MySQL的Python等价物';如果为空

MySQL的Python等价物';如果为空,python,Python,Python中是否有函数检查返回值是否为None,如果为None,则允许您将其设置为另一个值,如MySQL中的IFNULL函数 不太可能,因为您无法重新绑定参数 if foo is None: foo = 42 或 像这样: x = SOME_VALUE if x is None else x 因为这个问题已经有2年多的历史了,我想这更多是为了将来的参考:) 我喜欢做的是max(“”,mightBeNoneVar)或max(0,mightBeNoneVar)(取决于上下文) 更详细的示例

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

不太可能,因为您无法重新绑定参数

if foo is None:
  foo = 42

像这样:

x = SOME_VALUE if x is None else x

因为这个问题已经有2年多的历史了,我想这更多是为了将来的参考:)

我喜欢做的是
max(“”,mightBeNoneVar)
max(0,mightBeNoneVar)
(取决于上下文)

更详细的示例:

print max(“”,col1).ljust(width1)+=>“+max(“”,col2).ljust(width2)

如果要将所有“falsy”值(即
None
0
[]
False
,等等)转换为特定值,并让其他所有内容不受影响,则可以使用
。例如:

print (x or default_value)
将打印
x
的值(如果是真的),如果
x
为假,则打印
default\u值(如果是假的)

我之所以提到这一点,是因为
IFNULL
经常以这种方式用于清除数据库中布尔和数字列中的空值,因此可能是您或其他人想要的。显然,如果您想将
None
0
False
等区别对待,这是行不通的。

nvl(v1,v2)
将返回
v1
,否则返回
v2


nvl=lambda,b:a或b

我正在使用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
从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
我们制作了这个:

def d_nvl(d,键,默认值):
尝试:
返回d[键]
除例外情况外:
返回默认值
它是这样使用的:
my_val=d_nvl(my_dict,'my_key','default_val')

如果var不是其他var,则
ifnull()的主体也可以缩短为
val。它可以缩短为
返回var或val
actually@IonutHulub:不,因为很多非
None
值都是假的。在我看来有点复杂,另外值得注意的是,在2.x和Python3.x中进行类似的比较时,
NoneType
是不可排序的,因此您将得到一个
TypeError
,而这个代码片段可以解决这个问题,确实有助于提高您的文章质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性!这是一个更好的解决方案,适用于那些不想对某个对象进行两次求值或将其保存到临时变量的人。是的,正如您上面提到的,只有在确定x为正或无时,此方法才有效。否则,负x或0也将返回默认值_value@HarryDuong负数不是
False
。只有零是
False
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