[Python] 제너레이터 (Generator)
반응형
Python에서 제너레이터(Generator)는 큰 데이터를 메모리에 효율적으로 처리할 수 있게 도와주는 특별한 이터레이터입니다. 일반적인 함수와 달리, 제너레이터는 값을 한 번에 하나씩 반환하고, 매번 호출될 때 이전 상태를 기억합니다. 제너레이터는 yield
키워드를 사용하여 값을 반환하며, return
을 사용하면 더 이상 값을 생성하지 않고 종료됩니다
제너레이터의 특징
- 메모리 효율성: 제너레이터는 값을 필요할 때마다 하나씩 생성하므로, 큰 데이터를 처리할 때 메모리를 아낄 수 있습니다.
- Lazy Evaluation(지연 평가): 모든 값을 한꺼번에 생성하지 않고, 요청할 때마다 값을 생성하여 반환합니다.
- 상태 유지:
yield
키워드 덕분에 함수의 상태가 유지되며, 중단된 위치에서 다시 시작할 수 있습니다.
기본 예제: 간단한 제너레이터 함수
아래의 예제는 yield
를 사용하여 1부터 3까지의 값을 하나씩 반환하는 제너레이터 함수입니다.
def simple_generator():
yield 1
yield 2
yield 3
for value in simple_generator():
print(value)
# 출력:
# 1
# 2
# 3
yield
가 호출될 때마다 함수의 상태를 기억하며, 다음 for
루프에서 호출하면 이전 위치에서 다시 시작합니다.
제너레이터로 큰 데이터 처리하기
일반적으로 range()
함수를 사용할 때 큰 범위를 다루게 되면 많은 메모리를 차지하게 됩니다. 이럴 때 제너레이터를 사용하면 효율적으로 메모리를 사용할 수 있습니다.
def large_range(n):
for i in range(n):
yield i
for number in large_range(100):
print(number)
# 이 예제에서는 0부터 100까지의 값을 생성하면서, 매번 하나씩 출력합니다.
제너레이터 표현식
제너레이터 표현식은 리스트 내포와 비슷한 문법을 사용하여 간단히 제너레이터를 생성할 수 있습니다. ()
괄호를 사용해 리스트 내포를 제너레이터로 변환합니다.
squared_numbers = (x**2 for x in range(5))
for num in squared_numbers:
print(num)
# 출력:
# 0
# 1
# 4
# 9
# 16
yield
와 return
의 차이점
yield
는 값을 반환하면서 함수의 상태를 유지하고, 다음에 호출될 때 이어서 실행됩니다.return
은 값을 반환하고 함수의 실행을 종료합니다.
제너레이터는 메모리 효율성을 높이고, 큰 데이터 처리를 쉽게 해주는 Python의 중요한 도구입니다. 큰 데이터 파일을 읽거나, 연속적인 계산을 처리할 때 매우 유용합니다.
반응형
'Tech & Development > Programming Languages' 카테고리의 다른 글
[Python] 함수형 프로그래밍 (0) | 2024.11.24 |
---|---|
[Python] 시간과 날짜 처리 (0) | 2024.11.23 |
[Python] 정규 표현식 (Regex) (0) | 2024.11.12 |
[Python] 코드를 한 줄로 줄이는 방법: 내포 표현식과 One-liners (0) | 2024.11.11 |
Python Packaging: pyproject.toml로 프로젝트 설정을 간편하게! (1) | 2024.04.25 |
댓글
이 글 공유하기
다른 글
-
[Python] 함수형 프로그래밍
[Python] 함수형 프로그래밍
2024.11.24 -
[Python] 시간과 날짜 처리
[Python] 시간과 날짜 처리
2024.11.23 -
[Python] 정규 표현식 (Regex)
[Python] 정규 표현식 (Regex)
2024.11.12 -
[Python] 코드를 한 줄로 줄이는 방법: 내포 표현식과 One-liners
[Python] 코드를 한 줄로 줄이는 방법: 내포 표현식과 One-liners
2024.11.11