본문 바로가기
파이썬

파이썬이 for 및 while 루프 뒤에 'else'를 사용하는 이유는 무엇입니까?

by º기록 2020. 9. 15.
반응형

이 구조가 어떻게 작동하는지 이해합니다.

for i in range(10):
    print(i)

    if i == 9:
        print("Too big - I'm giving up!")
        break;
else:
    print("Completed successfully")

하지만 여기서 else 가 키워드로 사용되는 이유를 이해할 수 없습니다. 문제의 코드가 for 블록이 완료되지 않은 경우에만 실행된다는 것을 암시하기 때문입니다. 무엇을하는지! 어떻게 생각하든 내 두뇌는 for 문에서 else 블록으로 원활하게 진행할 수 없습니다. 나에게는 continue 또는 continuewith 가 더 합리적 일 것입니다 (그리고 나는 그것을 읽도록 스스로 훈련하려고합니다).

파이썬 코더가이 구조를 머리 속에서 (또는 원한다면 큰 소리로) 어떻게 읽는지 궁금합니다. 아마도 나는 그러한 코드 블록을 더 쉽게 해독 할 수있는 무언가를 놓치고 있는가?

 

해결 방법

 

숙련 된 Python 코더에게도 이상한 구조입니다. for-loops와 함께 사용하면 기본적으로 "이터 러블에서 일부 항목을 찾으십시오. 그렇지 않으면 아무것도 발견되지 않으면 ..."을 의미합니다. 에서와 같이 :

found_obj = None
for obj in objects:
    if obj.key == search_key:
        found_obj = obj
        break
else:
    print('No object found.')

그러나이 구조를 볼 때마다 더 나은 대안은 검색을 함수로 캡슐화하는 것입니다.

def find_obj(search_key):
    for obj in objects:
        if obj.key == search_key:
            return obj

또는 목록 이해력을 사용하십시오.

matching_objs = [o for o in objects if o.key == search_key]
if matching_objs:
    print('Found {}'.format(matching_objs[0]))
else:
    print('No object found.')

다른 두 버전과 의미 론적으로 동일하지는 않지만 전체 목록을 반복하는지 여부가 중요하지 않은 성능이 중요하지 않은 코드에서 충분히 작동합니다. 다른 사람들은 동의하지 않을 수 있지만 개인적으로 프로덕션 코드에서 for-else 또는 while-else 블록을 사용하지 않을 것입니다.


 

참조 페이지 https://stackoverflow.com/questions/9979970

 

 

반응형

댓글