BETTER WAY 9) for나 while 루프 뒤에 else 블록을 사용하지 말라
✅for & while 사용할수 있는 else의 문제점
파이썬은 루프가 반복 수행하는 내부 블록 바로 다음에 else 문을 추가할 수 있다.
for i n range(3):
print("Loop", i)
else:
print("else Block")
->
Loop 0
Loop 1
Loop 2
Else Block
반복문에 반복이 끝나면 else가 실행된다. 코드를 읽기에는 부자연스러운 표현이다. if/else문은 if문에 조건이 안 맞으면 else문을 실행하라는 의미이다. try/except는 try를 하다가 except가 발생하면 except가 실행하라는 의미이다.
for문에 else는 실행 방식이 의미랑 많이 다르다. 파이썬을 처음 접한 프로그래머가 이러한 문자를 보면 "루프가 정상적으로 완료되지 않으면 이 블록이 실행하라"라고 가정할 수 있다. 하지만 여기서 사용되는 else 블록은 완전히 반대로 동작한다. break가 동작하면 else문은 실행되지 않는다.
for i in range(3):
if i == 2:
break
print("Loop", i)
else:
print("Else block")
->
Loop 0
Loop 1
빈 시퀀스에 대한 루프를 실행하면 else 블록이 바로 실행된다.
for i in []:
if i == 2:
break
print("Loop", i)
else:
print("Else block")
->
Else block
if/else문과 try/except는 의미에 맞게 동작하지만 반복문은 그렇지 않다.
while 루프의 조건을 False로 설정하면 루프가 실행은 안되지만 else문이 바로 실행된다.
while False:
print("실행 안됨")
else:
print("While Else block")
->
While Else block
이런 식으로 동작하는 이유는 루프를 사용해 검색을 수행할 경우이다. 예를 들어 어떤 검색을 통해서 값을 참, 거짓을 판별하는 코드를 짠다고 했을 때 이 코드 참이면 참이라고 알려주는 코드를 보여주고 싶을 때가 있다. 그때 else문을 사용하면 된다.
lst = [s for s in range(2,10,2)]
for i in lst:
if i%2 != 0:
print("짝수가 아닙니다.")
break
else:
print("짝수입니다.")
하지만 이런 식으로 코드를 작성하는 것보다 도우미 함수를 작성하는 것이 훨씬 좋다. 도우미 함수를 작성하는 2가지 방법이 있다.
✅ else보다 도우미함수를 작성하라
✍🏻 첫번째 방법 - 원하는 조건을 찾자마자 빠르게 함수를 반환하는 방식
def check(lst:list)->bool:
for i in lst:
if i % 2 != 0:
return False
return True
✍두번째 방법 - 원하는 대상을 찾으면 결과 변수를 반환하는 방법
def check(lst:list)->bool:
check_var = True
for i in lst:
if i % 2 != 0:
check_var = False
break
return check_var
def check(lst:list)->bool:
for i in lst:
if i % 2 != 0:
return False
return True
def check(lst:list)->bool:
check_var = True
for i in lst:
if i % 2 != 0:
check_var = False
break
return check_var
두 접근 방법 모두 코드를 처음 보는 사람에게는 훨씬 더 명확하다.
굳지 else를 사용해서 이해하는데 시간 낭비할 필요는 없다.
파이썬에서 루프와 같은 간단한 구성 요소는 그 자체로 의미가 명확해야 한다.
✍🏻절대로 루프 뒤에 else블록을 사용하지 말아야 한다.
Author And Source
이 문제에 관하여(BETTER WAY 9) for나 while 루프 뒤에 else 블록을 사용하지 말라), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ssdii44/BETTER-WAY-9-for나-while-루프-뒤에-else-블록을-사용하지-말라저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)