Un amigo (compañero de scripts de python recreativo de bajo nivel de habilidad) me pidió que revisara algún código. Noté que tenía 7 declaraciones separadas que básicamente decían.Python if statement efficiency
if (a and b and c):
do something
las declaraciones a, b, c probaron su igualdad o falta de valores establecidos. Cuando lo miré, descubrí que debido a la naturaleza de las pruebas, podía volver a escribir todo el bloque lógico en 2 ramas que nunca llegaban a más de 3 de profundidad y rara vez pasaban del primer nivel (lo que hacía que la prueba de ocurrencia más rara fuera primero).
if a:
if b:
if c:
else:
if c:
else:
if b:
if c:
else:
if c:
Para mí, lógicamente, parece que debería ser más rápido si usted está haciendo menos pruebas más simples, que no logran más rápido y seguir adelante. Mis verdaderas preguntas son
1) Cuando digo if y else, si el if es cierto, ¿el resto se ignora por completo?
2) En teoría sería
si (a y b y c)
tomar tanto tiempo como los tres estados por separado si lo haría?
De acuerdo. No se preocupe por el rendimiento, preocúpese por la legibilidad. Como Martin Fowler dice: "Cualquier tonto puede escribir código que una computadora puede entender ... Pero solo los buenos programadores escriben códigos que los humanos pueden entender". –
Y si sospecha que tiene un problema de rendimiento, lo primero que debe hacer es medir la velocidad de su código. Luego, escriba su versión alternativa, mida eso y vea si su cambio hace que el código sea más rápido. Hay una gran sección en * Code Complete * sobre esto. –