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