And y Or

Arnau Sanchez arnau en ehas.org
Vie Nov 2 19:28:27 CET 2007


Daniel escribió:

> 	No entiendo muy bien el tema de los nexos lógicos en python, sé que
> devuelve el primero sino el segundo, pero no entiendo la ventaja (o no)
> del sistema.

Si te entiendo bien, preguntas sobre la posibilidad de usar operadores 
and/or como nexos lógicos. Lo básico es saber que:

- x or y or z

Devuelve el primero elemento verdadero (sin evaluar el resto). Si 
ninguno es verdadero, devuelve el último.

- x and y and z

Devuelve el primero elemento falso (sin evaluar el resto). Si todos son 
verdaderos, devuelve el último.

Este comportamiento permite hacer cosas como ésta (sacado de un artículo 
de David Mertz):

if cond1:
	fun1()
elif cond2:
	fun2()
else:
	fun3()

(cond1 and fun1()) or (cond2 and fun2()) or fun3()

Ojo que, aunque no lo dice, esto es cierto sólo si las funciones funX() 
devuelven un valor verdadero, en caso contrario se seguirá evaluando la 
expresión. Si eso no se puede garantizar, se tiene que adaptar:

((cond1 and func1) or (cond2 and func2) or func3)()

 > En tal caso como sería el siguiente pseudocódigo empleando python
 > 	si (x>0 y z="pppp") entonces ....

(x > 0) and (z == "pppp") and funcion()

...

El tema suele salir en textos sobre programación funcional, por ejemplo:

http://gnosis.cx/publish/programming/charming_python_13.html

El código resultante puede quedar ofuscado, y en general se recomienda 
usar estructuras if/elif/else.

arnau
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


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