Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/03/2011, 17:18
AxL456
Invitado
 
Mensajes: n/a
Puntos:
condicionales. Existe alguna diferencia en la manera de estructurarlos?

digamos que tengo una variable llamada "direction" la cual puede tener cualquiera de los siguientes valores:

"ZPXP", "ZMXP", "ZPXM", "ZMXM", "ZPYP", "ZMYP", "ZPYM", "ZMYM", "XPZP", "XMXZ", "XPZM", "XMXZ", "XPYP", "XMYP", "XPYM", "XMYM", "YPXP", "YMXP", "YPXM", "YMXM", "YPZP", "YMZP", "YPZM", "YMZM"

existe alguna manera de estructurar el flujo de los condicionales para mejorar el performance?

por ejemplo, si lo estructuro de esta manera, consigo que el numero de pasos sea menor?:

Código Python:
Ver original
  1. if direction[0] == "Z":
  2.     if direction[:2] == "ZP":
  3.         if direction == "ZPXM":
  4.             pass
  5.         elif direction == "ZPYP":
  6.             pass
  7.         elif direction == "ZPYM":
  8.             pass
  9.         elif direction == "ZPXP":
  10.             pass
  11.         else:
  12.             pass
  13.     elif direction[:2] == "ZM":
  14.         if direction == "ZMXM":
  15.             pass
  16.         elif direction == "ZMYP":
  17.             pass
  18.         elif direction == "ZMYM":
  19.             pass
  20.         elif direction == "ZMXP":
  21.             pass
  22.         else:
  23.             pass
  24.     else:
  25.         pass
  26. elif direction[0] == "Y":
  27.     if direction[:2] == "YP":
  28.         if direction == "YPZM":
  29.             pass
  30.         elif direction == "YPXM":
  31.             pass
  32.         elif direction == "YPZP":
  33.             pass
  34.         elif direction == "YPXP":
  35.             pass
  36.         else:
  37.             pass
  38.     elif direction[:2] == "YM":
  39.         if direction == "YMZM":
  40.             pass
  41.         elif direction == "YMXM":
  42.             pass
  43.         elif direction == "YMZP":
  44.             pass
  45.         elif direction == "YMXP":
  46.             pass
  47.         else:
  48.             pass
  49.     else:
  50.         pass
  51. elif direction[0] == "X":
  52.     if direction[:2] == "XP":
  53.         if direction == "XPYM":
  54.             pass
  55.         elif direction == "XPZM":
  56.             pass
  57.         elif direction == "XPYP":
  58.             pass
  59.         elif direction == "XPZP":
  60.             pass
  61.         else:
  62.             pass
  63.     elif direction[:2] == "XM":
  64.         if direction == "XMZM":
  65.             pass
  66.         elif direction == "XMYM":
  67.             pass
  68.         elif direction == "XMZP":
  69.             pass
  70.         elif direction == "XMYP":
  71.             pass
  72.         else:
  73.             pass
  74.     else:
  75.         pass
  76. else:
  77.     pass

si no estoy equivocado para este caso el numero mínimo de pasos que se pueden ejecutar es 3 (si "direction" == "ZPXM") y el numero máximo seria 9 (si "direction" == "XMYP")


otra forma de estructurarlo seria simplemente probar para todos y cada uno de los pasos:
Código Python:
Ver original
  1. if direction == "ZPXM":
  2.     pass
  3. elif direction == "ZPYP":
  4.     pass
  5. elif direction == "ZPYM":
  6.     pass
  7. elif direction == "ZPXP":
  8.     pass
  9. elif direction == "ZMXM":
  10.     pass
  11. elif direction == "ZMYP":
  12.     pass
  13. elif direction == "ZMYM":
  14.     pass
  15. elif direction == "ZMXP":
  16.     pass
  17. elif direction == "YPZM":
  18.     pass
  19. elif direction == "YPXM":
  20.     pass
  21. elif direction == "YPZP":
  22.     pass
  23. elif direction == "YPXP":
  24.     pass
  25. elif direction == "YMZM":
  26.     pass
  27. elif direction == "YMXM":
  28.     pass
  29. elif direction == "YMZP":
  30.     pass
  31. elif direction == "YMXP":
  32.     pass
  33. elif direction == "XPYM":
  34.     pass
  35. elif direction == "XPZM":
  36.     pass
  37. elif direction == "XPYP":
  38.     pass
  39. elif direction == "XPZP":
  40.     pass
  41. elif direction == "XMZM":
  42.     pass
  43. elif direction == "XMYM":
  44.     pass
  45. elif direction == "XMZP":
  46.     pass
  47. elif direction == "XMYP":
  48.     pass
  49. else:
  50.     pass

para este caso el minimo seria 1, y el maximo seria 24..

bueno la pregunta es, estructurar el codigo de la primera forma seria "mejor" que de la segunda?, existe alguna mejor manera de estructurar esto?