학습 목표
이번 강의에서는 파이썬의 제너레이터(Generator) 개념을 배우고, 이를 사용하여 메모리를 효율적으로 관리하는 방법을 익힐 것입니다. 제너레이터를 통해 큰 데이터 집합을 다루는 상황에서 효율성을 높일 수 있는 능력을 기립니다.
개념 설명
제너레이터는 이터레이터(iterator)의 일종으로, yield
키워드를 사용하여 값의 일시 중단 및 복원 기능을 제공합니다. 제너레이터는 필요할 때마다 값을 생성하여 메모리를 절약하며, 한 번에 모든 값을 메모리에 로드하지 않고도 큰 데이터 집합을 처리할 수 있습니다.
- 제너레이터는
next()
함수를 호출할 때마다 실행되며, 각 호출에서yield
문까지 실행 후 현재 상태를 유지합니다. - 제너레이터는 일반 함수와 동일한 방식으로 정의할 수 있으며, 이터레이터와 유사한 방식으로 사용할 수 있습니다.
예제 코드
# 간단한 제너레이터 정의
def count_up_to(max):
"""입력된 수까지 1씩 증가시키는 제너레이터"""
count = 1
while count <= max:
yield count # 현재 count 값을 반환하고 일시 중단
count += 1 # 다음 숫자로 증가
# 제너레이터 사용 예
counter = count_up_to(5)
for number in counter:
print(number) # 1, 2, 3, 4, 5가 차례로 출력됨
코드 설명
위 코드는 간단한 제너레이터의 예제를 보여줍니다.
count_up_to
함수는 주어진 최댓값까지 1씩 증가하는 제너레이터입니다.yield
문은 현재 값을 반환하고 함수의 상태를 유지하여 다음 호출 시 이어서 실행할 수 있도록 합니다.- 메인 부분에서는 제너레이터에 대한 이터레이션을 사용하여 생성된 값을 출력합니다.
연습 문제
1. 피보나치 수열을 생성하는 제너레이터를 작성하고, 원하는 수까지의 피보나치 수를 출력하는 프로그램을 만들어 보세요.
2. 제너레이터를 사용하여 주어진 리스트의 홀수만 반환하는 제너레이터를 작성해 보세요.
연습 문제 해답
# 1번 문제: 피보나치 수열 제너레이터
def fibonacci(n):
"""n번째까지의 피보나치 수열 제너레이터"""
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b # 다음 숫자로 업데이트
# 피보나치 수열 출력
for num in fibonacci(10):
print(num) # 처음 10개의 피보나치 수 출력
# 2번 문제: 홀수만 반환하는 제너레이터
def odd_numbers(numbers):
"""주어진 리스트의 홀수만 반환하는 제너레이터"""
for num in numbers:
if num % 2 != 0:
yield num
# 홀수 리스트 출력 예
my_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print("주어진 리스트의 홀수:")
for odd in odd_numbers(my_numbers):
print(odd) # 홀수 출력
### 설명
- **제너레이터**의 개념을 도입하여 메모리 활용도를 높이는 효율적인 방법을 보여줍니다.
- `yield` 키워드를 사용하여 함수 상태를 유지하면서 값을 점진적으로 생성하는 방법을 설명합니다.
- 연습 문제를 통해 사용자가 직접 제너레이터를 작성하고 활용할 수 있는 기회를 제공하여, 실전에서의 유용성을 강조합니다.
- 피보나치 수열 및 홀수 필터링 문제를 통해 제너레이터의 다양한 활용 가능성을 보여줍니다.
0 댓글