Re: Existe la instrucción ?

Josu Oyanguren josu.oyng en gmail.com
Vie Ene 13 15:36:34 CET 2006


El día 13/01/06, Batista, Facundo <Facundo.Batista en telefonicamoviles.com.ar>
escribió:
>
>
> #- >>> print (True and 0 or 1)
> #- 1
> #-
> #- para solventarlo se puede usar la expresión más general
> #-
> #- (<expresion_bool> and [<valor_si_verdadero>] or
> #- [<valor_si_falso>])[0]
> #-
> #- aunque es mucho más engorrosa. En la práctica yo uso el and
> #- ... or tal cual,
> #- teniendo cuidado con los valores de vuelta. (Ya me he roto
> #- la cabeza alguna
> #- vez arreglando errores por esta tontería).
> #-
> #- >>> print (True and [0] or [1])[0]
> #- 0
>
> Ojo, que "and" y "or" no devuelven booleanos, sino el objeto en si...>>> l
> =
> "asd"
>
> >>> x = l or False
> >>> x is l
> True
> >>>


Gracias por la apreciación,

quizá el ejemplo que he puesto no era el más afortunado. Lo que quería
mostrar es que para que funcione "and ... or" como "? ... :" , el objeto que
se pone como <valor_si_verdadero> no debe evaluarse como falso. Esto
incluye, False (evidentemente), None, 0, "", listas vacías, tuplas vacías,
diccionarios vacíos, ... entre otros. Cualquier cosa que pase un "assert not
X"

Espero que esto lo deje es más claro:

>>> assert not []
>>> True and [] or [1,4,5]
[1, 4, 5]




Más información sobre la lista de distribución Python-es