0Pricing
Python Academy · 강의

제너레이터 표현식

간결한 지연 파이프라인 작성하기

제너레이터 표현식은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

리스트 컴프리헨션에서 제너레이터 표현식으로

제너레이터 표현식은 리스트 컴프리헨션과 비슷하지만 대괄호 대신 괄호를 사용합니다. 전체 리스트를 만드는 대신 지연 방식으로 값을 생성합니다.

list_comp = [x * x for x in range(5)]
gen_expr = (x * x for x in range(5))
print(list_comp)
print(gen_expr)
print(list(gen_expr))

메모리 사용량 비교

리스트 컴프리헨션은 모든 요소를 미리 메모리에 할당합니다. 제너레이터 표현식은 값을 요청할 때까지 거의 아무것도 보관하지 않습니다. 두 방식의 크기를 비교해 보세요.

import sys
lst = [x for x in range(10000)]
gen = (x for x in range(10000))
print('list bytes:', sys.getsizeof(lst))
print('gen bytes:', sys.getsizeof(gen))

제너레이터 표현식 반복하기

제너레이터 표현식은 모든 반복자와 같은 방식으로 소비합니다. for 반복문이나 next()를 사용하거나 함수에 전달하면 됩니다.

gen = (c.upper() for c in 'hello')
for ch in gen:
    print(ch)

if로 필터링하기

컴프리헨션에서처럼 if 절을 추가하면 조건에 맞는 항목만 남길 수 있습니다.

evens = (n for n in range(10) if n % 2 == 0)
print(list(evens))

함수에 직접 전달하기

제너레이터 표현식이 함수의 유일한 인수라면 바깥쪽 괄호를 생략할 수 있습니다. 이렇게 하면 코드가 깔끔해지고 임시 리스트를 만들지 않아도 됩니다.

total = sum(x * x for x in range(5))
print(total)
biggest = max(len(w) for w in ['a', 'abc', 'ab'])
print(biggest)

한 번만 사용한다는 점 기억하기

제너레이터 표현식은 제너레이터 함수와 마찬가지로 한 번 순회하면 모두 소비됩니다. 두 번째 순회에서는 아무것도 생성하지 않습니다.

gen = (x for x in range(3))
print(list(gen))
print(list(gen))

표현식 연결하기

한 제너레이터 표현식의 결과를 다른 제너레이터 표현식에 전달하여 지연 방식의 pipeline을 만들 수 있습니다. 최종 소비자가 값을 요청하기 전까지는 아무것도 계산되지 않습니다.

nums = (n for n in range(10))
evens = (n for n in nums if n % 2 == 0)
doubled = (n * 2 for n in evens)
print(list(doubled))

any()와 all()

제너레이터 표현식은 any()와 all()에서 특히 유용합니다. 결과를 알 수 있는 즉시 중단하는 단락 평가가 가능하기 때문입니다.

words = ['cat', 'dog', 'elephant']
print(any(len(w) > 5 for w in words))
print(all(len(w) >= 3 for w in words))

중첩 반복문

컴프리헨션과 마찬가지로 제너레이터 표현식은 여러 for 절을 지원하며, 왼쪽에서 오른쪽으로 읽습니다.

pairs = ((x, y) for x in range(2) for y in range(2))
print(list(pairs))

지연 방식 pipeline 예제

간단한 텍스트 처리 pipeline의 예입니다. 각 단계가 지연 방식으로 동작하므로 큰 파일도 전체를 메모리에 불러오지 않고 스트리밍할 수 있습니다.

lines = ['  alpha ', '', '  beta', 'gamma  ']
stripped = (line.strip() for line in lines)
nonempty = (line for line in stripped if line)
print(list(nonempty))

어떤 방식을 선택할까요

데이터를 여러 번 사용하거나 인덱싱이 필요하다면 리스트 컴프리헨션을 사용하세요. 한 번만 순서대로 처리하거나 데이터가 많다면 제너레이터 표현식을 사용하세요.

data = range(6)
as_list = [x + 1 for x in data]
print(as_list[0], as_list[-1])
total = sum(x + 1 for x in data)
print(total)

빠른 확인

제너레이터 표현식에 대한 이해도를 확인해 보세요.

복습

제너레이터 표현식을 배웠습니다.

  • 리스트 컴프리헨션을 지연 방식으로 대체할 때 괄호를 사용합니다.
  • 메모리를 절약하고 if 필터와 중첩 반복문을 지원합니다.
  • sum, any, all 및 연결 작업과 잘 어울립니다.
  • 한 번만 사용할 수 있습니다.

다음은 yield from으로 제너레이터를 구성하는 방법입니다.

자주 묻는 질문

“제너레이터 표현식” 강의는 무료인가요?

네 — “제너레이터 표현식” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“제너레이터 표현식”에서 뭘 배우나요?

간결한 지연 파이프라인 작성하기 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Python Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“제너레이터 표현식” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 반복자 프로토콜
  2. 제너레이터 함수
  3. 제너레이터 표현식
  4. yield from과 위임
← Python Academy(으)로 돌아가기