2011-08-11 9 views
5

Actualmente estoy pasando por el tutorial Lynda Python y en el apartado de los generadores que veo el siguiente código:Python: para el bucle entre if-else, ¿cómo/por qué funciona esto?

def isprime(n): 
    if n == 1: 
     return False 
    for x in range(2, n): 
     if n % x == 0: 
      return False 
    else: 
     return True 

no he entendido que en un primer momento, pero como yo estaba pasando por el código Noté que la palabra clave else tenía un for-loop completo entre ella y un if en el mismo nivel de sangría. Para mi sorpresa, el código no solo se ejecuta, realmente produce el comportamiento correcto.

Si tuviera que reemplazar el for-loop con una simple declaración print("Hello, World"), solo entonces obtendré un error esperado del intérprete.

¿Cuál es el razonamiento detrás de esta sintaxis, y por qué funciona con enunciados de bucle pero no en otros como print()?

A modo de referencia, lo que habría esperado el código para ser escrito como la siguiente:

def isprime(n): 
    if n == 1: 
     return False  
    for x in range(2, n): 
     if n % x == 0: 
      return False 
    return True 
+0

Bueno, todo esto me parece normal ... de hecho es equivalente a la forma esperada (en el segundo bloque de código), porque el corte nunca se llama en el ciclo – wim

Respuesta

8

Un bloque else: después de un bloqueo for: sólo se ejecuta si el bucle ha completado con normalidad. Si break sale del bucle, no se ejecutará. En este caso, esto no hace diferencia porque nunca saldrá del ciclo; usted return antes de que termine o deja que se complete normalmente.

2

El motivo de este comportamiento es que en python for loop en realidad puede seguirse por la instrucción else. Otra rama se ejecuta en caso de usual final de bucle y se omite después de rompiendo.

Cuestiones relacionadas