프로그래밍 언어/Python

파이썬이 for 및 while 루프 뒤에 'else'를 사용하는 이유

Rateye 2021. 10. 15. 10:41
728x90
반응형
질문 : 파이썬이 for 및 while 루프 뒤에 'else'를 사용하는 이유는 무엇입니까?

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

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 블록을 사용하지 않을 것입니다.

[Python-ideas] for ... else 스레드 요약 참조

출처 : https://stackoverflow.com/questions/9979970/why-does-python-use-else-after-for-and-while-loops
728x90
반응형