[Python-es] None < 0 ???
Oswaldo Hernández
listas en soft-com.es
Mie Ene 2 23:14:54 CET 2008
Oswaldo Hernández escribió:
> Arnau Sanchez escribió:
>> Oswaldo Hernández escribió:
>>
>>> Si la definición de None es la ausencia de valor, la expresión None <
>>> 1 ¿no deberia ser tambien false?
>>
>> Como "None" no implementa las "rich comparisons" (__gt__, __lt__, etc)
>> no tiene mucho sentido compararlo con otros objetos. Al respecto la
>> documentación dice:
>>
>> http://docs.python.org/ref/comparisons.html
>>
>> "The operators <, >, ==, >=, <=, and != compare the values of two
>> objects. The objects need not have the same type. If both are numbers,
>> they are converted to a common type. Otherwise, objects of different
>> types always compare unequal, and are ordered consistently but
>> arbitrarily."
>>
>> Sólo se le pide ser consistente, así que el resultado depende de la
>> implementación. Si miramos las fuentes, en CPython vemos:
>>
>> (Objects/object.c)
>>
>> /* None is smaller than anything */
>> if (v == Py_None)
>> return -1;
>> if (w == Py_None)
>> return 1;
>>
>> Lo que explica el comportamiento que observas.
>
> Ok, ya esta mas claro.
> El problema es que asocio None con el NULL de la base de datos, si en
> PostgreSQL ejecuto:
> select case
> when null = 0 then 'cero'
> when null > 0 then 'positivo'
> when null < 0 then 'negativo'
> else 'nulo'
> end
>
Corrección de la sentencia:
select case
when 0 is null then 'cero'
when null > 0 then 'positivo'
when null < 0 then 'negativo'
else 'nulo'
end
> El resultado es:
> 'nulo'
>
> Ahora veo que None no es lo mismo que NULL.
>
> Gracias.
>
--
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
Más información sobre la lista de distribución Python-es