And y Or

Chema Cortes py en ch3m4.org
Sab Nov 3 11:32:44 CET 2007


El Friday 02 November 2007 18:41:39 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.
> En tal caso como sería el siguiente pseudocódigo empleando python
> 	si (x>0 y z="pppp") entonces ....

Creo que ya te lo han explicado bastante bien. Desde el principio de la 
programación (incluso antes, cuando la álgebra de Boole), se consideró que se 
podían optimizar una expresión lógica "cortocicuitando" su evaluación. Aún 
así, hay lenguajes (como el Visual Basic) que evalúan primero todos los 
miembros de la expresión lógica antes de pasar a su evaluación. Si fuéramos 
puristas, siempre habría que hacerlo así si aplicáramos las prioridades de 
los operadores. Pero en la gran mayoría de las ocasiones no cambia nada el 
resultado de la expresión.

Casos excepcionales: por ejemplo éste   (1 or 1/0)

Si evaluaras ambos miembros se produciría un error de división por cero. Al 
aplicarse el cortocicuito, se evalúa siempre como 1.

Un uso muy común era para evitar errores:

if (not Exists(a) or a<0) then a=0

Es una comprobación típica de los argumentos que entran en una función. Sin 
cortocicuito no funcionaría tal como esperamos ya que el segundo miembro de 
la expresión lógica fallaría de no existir la variable.

Otro uso muy común es para emular el operador ternario:

a?b:c  --> a and b or c

Con el python 2.5 se transforma en:

b if a else c

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