파이썬에서는 다른 프로그래밍 언어에는 없는 문법인 for~ else~ 문을 지원한다.
우리가 아는 보통의 else문은 if문과 함께 사용하여 조건을 불만족할 때 처리하기 위한 로직으로 사용하고 있다. 하지만 특이하게 파이썬에서는 for~ else~ 라는 문법이 존재해 for문을 돌면서 for문 내부에서 break를 만나지 않았을 때의 동작을 제시할 수 있다.
아래의 코드를 보면 이해가 쉬울 것이다.
n = 5
for i in range(10):
if n == i:
print('n: {} / i: {}'.format(n, i))
break
else:
print(i)
위 코드는 우리가 흔히 사용하는 for문과 if~ else~ 문의 형태이다.
n과 i의 값이 같을 경우 break에 걸려 반복문의 실행이 중단될 것이다.
n = 11
for i in range(10):
if n == i:
break
else:
print("hello")
이번 코드는 앞서 본 코드와 다르게 else문이 for문과 같은 들여쓰기 라인에 있다.
for~ else~ 문은 for와 else를 같은 크기의 들여쓰기를 해줌으로써 사용이 가능하다.
위에서는 for문 내에서 n과 i가 같아지는 경우가 없기 때문에 break가 걸리지 않고,
else 구문이 동작하는 것을 확인할 수 있다.
n = 11
for i in range(10):
if n == i:
print('n: {} / i: {}'.format(n, i))
else:
print("hello")
또한 이 코드와 같이 for문 내에 반드시 break가 존재해야 하는 것도 아니다.
위 코드는 for문이 다 돌고 난 후 break가 없었기 때문에 자연스레 else문이 동작한다.
하지만 이와 같은 경우는 그냥 else 없이 print만 있어도 똑같은 동작을 수행한다.
그럼 for~ else~는 결국 필요 없는것 아닌가 하는 생각이 들 수도 있지만, for문 내에서 조건에 의해 break를 걸어야 하는 경우 break가 걸리는 특수한 상황을 만족하지 않을때 사용이 가능하다. 예를들어 내가 설정한 반복문이 특정 조건을 만족하여 break가 걸려야 하는데 걸리지 않고, 정해진 횟수만큼 for문이 다 돌았을때 이 경우 어떻게 동작하도록 처리할 지 지정해 줄 수 있는 것이다. 특수한 케이스의 try~ catch~ 구문이라고도 생각할 수 있겠다.