PHpullh
학습 라이브러리/Python/제너레이터 표현식

PYTHON · 컬렉션

제너레이터 표현식

제너레이터 표현식으로 메모리 효율적인 지연 평가 이터레이터를 만듭니다.

컬렉션중급generator제너레이터지연 평가lazy

핵심 설명

제너레이터 표현식으로 메모리 효율적인 지연 평가 이터레이터를 만듭니다.

Python code

# 제너레이터 표현식 vs 리스트 컴프리헨션
import sys

list_comp = [x**2 for x in range(10000)]
gen_expr = (x**2 for x in range(10000))

print(f"리스트: {sys.getsizeof(list_comp):,} bytes")
print(f"제너레이터: {sys.getsizeof(gen_expr)} bytes")

# 함수 인자로 직접 전달 (괄호 생략 가능)
total = sum(x**2 for x in range(100))
print(f"제곱의 합: {total}")

exists = any(x > 50 for x in [10, 20, 60, 30])
print(f"50 초과 존재: {exists}")  # True

# 체이닝
lines = ["  hello  ", "", "  world  ", "  ", "python"]
cleaned = list(
    filter(None, (line.strip() for line in lines))
)
print(cleaned)  # ['hello', 'world', 'python']

# 대용량 파일 처리 패턴
# total_size = sum(
#     os.path.getsize(f)
#     for f in glob.glob("**/*.py", recursive=True)
# )

학습 팁

함수의 유일한 인자가 제너레이터 표현식이면 바깥 괄호를 생략할 수 있습니다: sum(x for x in data).

주의할 점

제너레이터는 한 번만 순회 가능합니다. 여러 번 순회하려면 리스트로 변환하거나 새 제너레이터를 생성하세요.

자주 묻는 질문

제너레이터 표현식란 무엇인가요?

제너레이터 표현식으로 메모리 효율적인 지연 평가 이터레이터를 만듭니다.

제너레이터 표현식 학습 시 주의할 점은 무엇인가요?

제너레이터는 한 번만 순회 가능합니다. 여러 번 순회하려면 리스트로 변환하거나 새 제너레이터를 생성하세요.