2011-08-13 13 views
9

¿Cuál es mejor utilizar:Python: elif o nuevo si?

if var in X: 
    #do_whatever 
elif (var in Y): 
    #do_whatever2 

o:

if var in X: 
    #do_whatever 
if var in Y: 
    #do_whatever2 

Suponiendo var no puede estar en ambos X e Y ... ¿Hay alguna norma o práctica común? ¿Debo usar elif? o un nuevo if? o no importa?

EDIT: Grandes respuestas .. Pero puedo decir que si la primera afirmación (#do_whatever) termina con una devolución o un descanso; donde en su extremo la otra condición no será probada, desperdiciando los recursos del sistema o causando problemas, está bien hacer lo que sea ... Supongo ...

+0

¿Estás seguro de que en la segunda parte no quisiste decir 'else if ...'? –

+2

esa es mi pregunta – amyassin

Respuesta

15

Hace la diferencia en algunos casos. Vea este ejemplo:

def foo(var): 
    if var == 5: 
     var = 6 
    elif var == 6: 
     var = 8 
    else: 
     var = 10 

    return var 

def bar(var): 
    if var == 5: 
     var = 6 
    if var == 6: 
     var = 8 
    if var not in (5, 6): 
     var = 10 

    return var 

print foo(5)  # 6 
print bar(5)  # 10 
+0

y ese es un gran punto a considerar ... – amyassin

+0

'bar (5)' devuelve 10, no 8 – Air

+1

@AirThomas Tienes razón, gracias ! ¿Después de tanto tiempo eres el primero en detectarlo? agradable;) –

5

Si la segunda afirmación es imposible si la primera es verdadera (como es el caso aquí, ya que dijiste que var no puede estar tanto en X como en Y), entonces deberías estar usando un elif. De lo contrario, la segunda verificación seguirá ejecutándose, lo cual es un desperdicio de recursos del sistema si sabe que va a fallar.

+0

no pensé en desperdicio de recursos del sistema ... buen punto ... – amyassin

1

Si var no puede haber tanto en X y Y, entonces debería usar elif. De esta forma, si var in X es true, no necesita evaluar inútilmente var in Y.

+0

pero no lo afecta ¿verdad? – amyassin

+1

No, pero si 'Y' es una lista muy grande, estarías desperdiciando recursos ejecutando un cheque que sabes que siempre devolverá falso, si' var in X' es 'true'. –

+0

sí, sí, no ... no pensé en eso antes de la pregunta :) – amyassin

2

Si necesita realizar ambas comprobaciones, debe usar dos if s por separado. Si desea verificar uno o la orden, siempre debe usar elif porque

  • Es más eficiente. Ahorrará recursos si su primera condición es verdadera.
  • Puede tener errores inesperados si ambas condiciones son verdaderas.

En cuanto a rendimiento, también debería considerar probar primero la condición más probable.

+0

+1 incluyó todos los puntos buenos – amyassin

2

Mirando el código sin conocimiento de los datos, entonces el caso elif explícitamente indica sus intenciones y es preferible.

El caso de dos sentencias if también sería más difícil de mantener, ya que incluso si se agregan comentarios, aún sería necesario verificarlos.

+0

sí, se vuelve más difícil de mantener cuando se agregan comandos si el código se expande ... – amyassin

Cuestiones relacionadas