2011-08-11 5 views
5

저는 현재 Lynda Python 튜토리얼을 진행하고 있습니다. 생성자에 대한 섹션에서 다음 코드를 볼 수 있습니다.파이썬 : if-else 사이의 for 루프, how/why는 어떻게 작동합니까?

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

처음에는 코드를 포착하지 않았지만 코드를 살펴 보았습니다. else 키워드는 동일한 들여 쓰기 레벨에서 if 사이의 전체 for-loop를가집니다. 놀랍게도 코드는 실행될뿐만 아니라 실제로 올바른 동작을 생성합니다.

for 루프를 간단한 print("Hello, World") 문으로 바꾸려면 예상 된 인터프리터 오류가 발생합니다.

이 구문의 추론은 무엇이었으며 루프 문과 함께 작동하는 이유는 무엇입니까? print()와 같은 다른 구문은 사용할 수없는 이유는 무엇입니까?

참고로 다음과 같이 코드를 작성해야합니다.

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

이 모든 것이 정상적으로 보입니다. 실제로는 break가 루프에서 호출되지 않기 때문에 (두 번째 코드 블록에서) 예상되는 것과 동일합니다. – wim

답변

8

루프가 정상적으로 완료 경우 for: 블록 후 else: 블록 만 실행됩니다. 루프 밖에서 break이 실행되면 실행되지 않습니다. 이 경우에는 루프에서 벗어나지 않으므로 아무런 차이가 없습니다. 당신이 return 끝나기 전에 또는 정상적으로 완료하도록하십시오.

2

이 동작은 이유는 python for loop에 실제로 else 문을 추가 할 수 있기 때문입니다. 다른 분기는 의 경우 보통 루프 마무리로 실행되고 이 깨진 후으로 건너 뛴 후에 건너 뜁니다.