Python 컴프리헨션은 선언적이다 (그리고 그것이 중요한 이유)
Source: Dev.to
리스트의 모든 숫자를 제곱하는 두 가지 방법
# Version A
squares = []
for num in numbers:
squares.append(num ** 2)
# Version B
squares = [num ** 2 for num in numbers]
명령형 vs. 선언형
Version A는 Python에게 리스트를 어떻게 만들지 알려줍니다:
- 빈 리스트를 생성합니다.
numbers를 순회합니다.- 제곱을 계산합니다.
- 리스트에 추가합니다.
- 반복합니다.
Version B는 Python에게 무엇을 원하는지 알려줍니다:
“각 숫자의 제곱 리스트를 주세요.”
당신이 작성하지 않은 코드를 읽을 때, 선언형 버전은 의도를 즉시 파악하게 해 주지만, 명령형 버전은 루프 로직을 추적해야 합니다.
신뢰성
선언형 코드는 실수하기 어렵습니다. 명령형 버전에서는 다음과 같은 실수가 발생할 수 있습니다:
squares = []초기화를 잊어버리기..append()를.appnd()처럼 오타 내기.- 잘못된 값을 추가하기.
- 루프를 조기에 종료하기.
리스트 컴프리헨션은 패턴이 문법에 내장되어 있기 때문에 이러한 실패 모드를 없애줍니다.
스스로에게 물어보세요: “이 컴프리헨션을 한 번에 빠르게 이해할 수 있나요?”
컴프리헨션이 잘 작동할 때
간단한 변환
[x ** 2 for x in numbers if x > 0]
너무 복잡해질 때 (피해야 함)
[(x, y) for x in range(10) for y in range(10)
if x != y and (x + y) % 2 == 0 and x ** 2 + y ** 2]
“이것은
f(x)값들의 리스트 입니다.”
아님:
“이것은 이러한 단계들을 거쳐 리스트 가 됩니다.”
이 차이를 내재화하면 자연스럽게 컴프리헨션을 사용하게 되고, 언제 루프가 더 적합한지 알 수 있습니다.
다가오는 책 Zero to AI Engineer: Python Foundations에서 발췌했습니다.
이와 같은 발췌를 Substack에 공유합니다 →