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
반응형
'프로그래밍 언어 > Python' 카테고리의 다른 글
Python 모듈의 모든 함수를 나열하는 방법 (0) | 2021.10.19 |
---|---|
Python에서 matplotlib를 사용하여 로그 축 플로팅 (0) | 2021.10.19 |
파이썬에서 현재 시간을 얻는 방법 (0) | 2021.10.15 |
Python array 항목 중에 다른 문자열 안에 문자열이 포함되어 있는지 확인 (0) | 2021.10.14 |
정수의 최대 값 및 최소값 (0) | 2021.10.13 |