Re: Existe la instrucción ?

Josu Oyanguren josu.oyng en gmail.com
Vie Ene 13 15:08:01 CET 2006


Con el and ... or hay que tener un poco de cuidado. Si la expresión
<valor_si_verdadero> evalúa como falso, en realidad el resultado es
<valor_si_falso> siempre, diga lo que diga la condición.

lo que en javascript, por ejemplo, es

true ? 0 : 1 -> 0

en python

>>> 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


El día 13/01/06, Chema Cortes <py en ch3m4.org> escribió:
>
> camontuyu escribió:
> > Hola a todos,
> >
> > me gustaría saber si existe alguna instrucción del tipo
> >
> > <valor> = <expresion_bool> ? <valor_si_verdadero> : <valor_si_falso>
> >
> > al estilo c/c++
>
> Es un tema de controversia frecuente entre los desarrolladores del
> lenguaje. Incluso se llegó a votar la sintaxis, aunque aún no se ha
> decido por incorporarla (Mira el PEP 308 -
> http://www.python.org/peps/pep-0308.html).
>
>
> Hasta que no incorporen la sintaxis, la mejor manera es:
>
> <expresion_bool> and <valor_si_verdadero> or <valor_si_falso>
>
>
> Aprovecha la evaluación corticuitada de expresiones lógicas (sólamente
> evalua una de las partes, la verdadera ó la falsa)
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>




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