파이썬에서는 루프나 반복 수행하는 내부 블록 바로 다음에
else 블록을 추가 할 수 있다.
[output]
예제처럼 else 블록은 루프가 끝나자마자 실행된다.
if/else 문에서 else 는
'이 블록 앞의 블록이 실행되지 않으면 이 블록을 실행하라' 라는 뜻이다
try/except 문에서 except 도
마찬가지로 '이 블록 앞의 블록을 시도하다가 예외가 발생하면 이 블록을 실행하라' 라는 뜻이다.
try/finally 문에서도
' 앞의 블록을 실행한 다음에는 이 블록을 실행하라' 라는 뜻이다.
이런 방식으로 이해를 했다면,
for/else의 else 부분의
'루프가 정상적으로 완료되지 않으면 이 블록을 실행하라' 라는
뜻으로 이해하기 쉽다.
하지만 실제 else 블록은 완전히 반대로 동작한다.
실제로 루프 안에서 break 문을 사용하면 else 블록이 실행 되지 않는다.
[output]
else 블록이 실행 되는 경우는,
시퀸스에 대한 루프를 실행 하는 경우
while 루프 조건이 처음부터 false 인 경우
이런 식으로 동작하는 이유는 루프를 사용해 검색을 수행할 경우이다.
루프 바로 뒤에 있는 else 블록이 그와 같이 동작해야 유용하기 때문이다.
예제로 알아보자.
두 수가 서로소( 두 수의 공약수가 1밖에 없음) 인지 알아보고 싶다고 하자.
이런 경우 공약수 일 가능성이 있는 모든 수를 이터레이션하면서 두 수를 나눌수 있는지 검사해야한다.
모든 가능성을 검사하고 나면 루프가 끝난다. 루프가 break를 만나지 않으면 두 수가 서로소이므로
else 블록이 실행된다.
[output]
하지만 이보다도
도우미 함수들을 사용하는것이 추천한다.
첫번째 방법은,
원하는 조건을 찾자마자 빠르게 함수를 반환하는 방식이다.
두번째 방법은,
루프 안에서 원하는 대상을 찾았는지 나타내는 결과 변수를 도입하는 것이다.
이러한 방법이 코드의 가독성에 훨씬 도움이 된다.
결론 : 루프 뒤에 else 블록을 사용하지 말자.
reference
1.https://thebook.io/080235/ch01/09/
파이썬 코딩의 기술 - 개정 2판: BETTER WAY 9 for나 while 루프 뒤에 else 블록을 사용하지 말라
thebook.io
2. 파이썬 코딩의 기술
'Python' 카테고리의 다른 글
Python programming for Bioinformatics - 연습문제 1 (0) | 2023.07.24 |
---|---|
Pandas DataFrame 첫번째 행을 헤더로 지정 (0) | 2022.03.11 |
range 보다는 enumerate 를 사용하자 (0) | 2022.01.17 |
Numpy.transpose (0) | 2022.01.10 |
Numpy.dot (0) | 2022.01.10 |