Python 컴프리헨션은 선언적이다 (그리고 그것이 중요한 이유)

발행: (2026년 1월 6일 오전 09:48 GMT+9)
3 min read
원문: Dev.to

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에게 리스트를 어떻게 만들지 알려줍니다:

  1. 빈 리스트를 생성합니다.
  2. numbers를 순회합니다.
  3. 제곱을 계산합니다.
  4. 리스트에 추가합니다.
  5. 반복합니다.

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에 공유합니다 →

Back to Blog

관련 글

더 보기 »