반응형
이 구조가 어떻게 작동하는지 이해합니다.
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
반응형
'파이썬' 카테고리의 다른 글
파이썬 matplotlib에서 로그 스케일로 값을 시각화하는 방법은 무엇입니까? (0) | 2020.09.15 |
---|---|
파이썬에서 중간 숫자를 찾는 방법 (0) | 2020.09.15 |
파이썬 목록 이해 조건의`elif` (0) | 2020.09.15 |
파이썬에서 날짜가 유효한지 확인하는 방법은 무엇입니까? (0) | 2020.09.15 |
파이썬에서 멋진 열 출력 만들기 (0) | 2020.09.15 |
댓글