2011-05-13 21 views

Respuesta

8

En realidad no, ya que no puede volver a enlazar argumentos.

if foo is None: 
    foo = 42 

o

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

foo = ifnull(foo, 42) 
+1

El cuerpo del 'IFNULL()' podría reducirse a 'val si var ninguno más var', también. –

+0

Se puede acortarse a 'retorno var o val' realidad –

+3

@IonutHulub: No, ya que una gran cantidad de valores no 'None' son falsas. –

2

De esta manera:

x = SOME_VALUE if x is None else x 
-2

Dado que esta cuestión es ahora más de 2 años de edad que supongo que esto es más para futuras referencias :)

Lo que desea hacer es max('', mightBeNoneVar) o max(0, mightBeNoneVar) (dependiendo del contexto).

ejemplo más elaborado:
print max('', col1).ljust(width1) + ' ==> '+ max('', col2).ljust(width2)

+0

parece un poco enrevesado para mí, y es también digno de mención que, si bien las comparaciones de este tipo de trabajo en 2.x, 3.x en Python, 'NoneType' no es que se puede pedir y así obtendrá un' TypeError' –

8

Si desea convertir todos los valores "Falsy" (es decir None, 0, "", [], False, etc.) a un valor específico y dejar todo lo demás a través intacta , puede usar or. Por ejemplo:

print (x or default_value) 

imprimirá el valor de x si es Truthy, y el valor de default_value si es x Falsy.

Menciono esto porque IFNULL se usa a menudo de esta manera para limpiar nulos en columnas booleanas y numéricas en una base de datos, y podría ser lo que usted u otros buscaban. Obviamente, si desea tratar None de manera diferente a 0, False, etc. esto no funcionará.