2011-05-13 3 views
5

Existe-t-il une fonction dans Python qui vérifie si la valeur retournée est None et si c'est le cas, vous permet de la définir sur une autre valeur comme la fonction IFNULL dans MySQL?Equivalent Python pour MySQL IFNULL

Répondre

8

Pas vraiment, puisque vous ne pouvez pas redéfinir les arguments.

if foo is None: 
    foo = 42 

ou

def ifnull(var, val): 
    if var is None: 
    return val 
    return var 

foo = ifnull(foo, 42) 
+1

Le corps de 'ifnull()' pourrait être raccourci à 'val si var est None else var', aussi. –

+0

Il peut être raccourci à 'return var ou val' en fait –

+3

@IonutHulub: Non, car beaucoup de valeurs non-' Non 'sont fausses. –

2

Comme ceci:

x = SOME_VALUE if x is None else x 
-2

Depuis cette question est maintenant plus de 2 ans, je suppose que cela est plus pour de futures références :)

Ce que je comme à faire est max('', mightBeNoneVar) ou max(0, mightBeNoneVar) (selon le contexte).

exemple plus élaboré:
print max('', col1).ljust(width1) + ' ==> '+ max('', col2).ljust(width2)

+0

Cela me semble un peu compliqué, et il vaut également la peine de noter que si des comparaisons comme celle-ci fonctionnent dans 2.x, dans Python 3.x, 'NoneType' n'est pas disponible et donc vous obtiendrez un' TypeError' –

8

Si vous voulez convertir tous les "valeurs" falsy (c.-à-None, 0, "", [], False, etc.) à une valeur spécifique et laisser tout le reste à travers intact , vous pouvez utiliser or. Par exemple:

print (x or default_value) 

imprimera la valeur de x si elle est truthy, et la valeur de default_value si x est falsy.

Je mentionne cela parce que IFNULL est souvent utilisé de cette façon pour nettoyer les valeurs nulles dans les colonnes booléennes et numériques dans une base de données et pourrait donc être ce que vous ou d'autres étiez après. Évidemment, si vous voulez traiter None différemment à 0, False, etc. ceci ne fonctionnera pas.