파이썬의 루프는 다른 프로그래밍 언어와는 다르게 루프에서 반복되는 내부 블록 바로 다음에 else
블록을 둘 수 있는 기능이 있다. 이 else
블록을 사용함에 있어서 주의해야 할 사항들을 이번 장에서 정리한다.
else 블록의 특징
- 루프가 종료되자마자 바로 실행:
- 루프가 완료되어야만 실행되는 것!
- 루프 내에서
break
문을 사용해야만else
블록을 건너뛸 수 있음
for i in range(3):
print("Loop %d" % i)
if i == 1:
break
else:
print("Else block!")
>>>
Loop 0
Loop 1
- 빈 시퀀스를 처리하는 루프문에서도
else
블록이 즉시 실행
for x in []:
print("Never runs")
else:
print("For Else block!")
>>>
For Else block!
while
루프가 처음부터 거짓인 경우에도 실행
while False:
print("Never runs")
else:
print("While Else block!")
>>>
While Else block!
else 블록의 활용
- 두 숫자가 서로소인지를 판별하는 코드
a = 4
b = 9
for i in range(2, min(a, b) + 1):
print("Testing", i)
if a % i == 0 and b % i == 0:
print("Not coprime")
break
else:
print("Coprime")
>>>
Testing 2
Testing 3
Testing 4
Coprime
- 이런 방식을 추천하진 않음
- 대신 두 가지 스타일의 헬퍼 함수를 사용하면 좋음
첫 번째 스타일의 헬퍼 함수
- 찾으려는 조건을 찾았을 때 바로 반환
- 루프가 실패로 끝나면 기본 결과(
True
)를 반환
def coprime(a, b):
for i in range(2, min(a, b) + 1):
if a % i == 0 and b % i == 0:
return False
return True
두 번째 스타일의 헬퍼 함수
- 루프에서 찾으려는 대상을 찾았는지 알려주는 결과 변수 사용
- 뭔가를 찾았으면 즉시
break
로 루프를 중단
def coprime(a, b):
is_coprime = True
for i in range(2, min(a, b) + 1):
if a % i == 0 and b % i == 0:
is_coprime = False
break
return is_coprime
else 블록을 쓰지 말아야 하는 이유
else
블록을 사용한 표현의 장점 < 코드를 이해하려는 사람들이 받을 부담감