반응형
파이썬의 제너레이터(generator)
파이썬의 제너레이터는 반복자(iterator)를 생성하는 특별한 종류의 함수입니다. 제너레이터는 일반 함수와 달리, 한 번 호출될 때마다 결과를 반환하고 다음 호출을 위해 상태를 기억합니다. 이를 통해 메모리 효율성을 높이며, 큰 데이터 집합을 순회할 때 유용합니다.
제너레이터의 특징
yield
키워드 사용: 제너레이터 함수 내부에서return
대신yield
키워드를 사용하여 값을 반환합니다.- 상태 유지:
yield
를 통해 값을 반환한 후, 다음 호출 때 이전 상태를 기억하여 계속 실행합니다. - 메모리 효율적: 제너레이터는 한 번에 하나의 값만 생성하므로 큰 데이터 집합을 처리할 때 메모리를 절약할 수 있습니다.
제너레이터 사용 예
다음은 제너레이터를 사용하여 피보나치 수열을 생성하는 예시입니다.
def fibonacci():
a, b = 0, 1 # 초기값 설정
while True:
yield a # 현재 값을 반환하고 함수의 상태를 기억
a, b = b, a + b # 다음 값 계산
fibo_gen = fibonacci() # 제너레이터 객체 생성
for i, value in enumerate(fibo_gen):
if i == 10:
break # 10번째 값까지만 출력
print(value)
제너레이터는 for
루프와 함께 사용되어 순회 가능한 객체를 생성하며, next
함수를 사용하여 직접 값을 얻을 수도 있습니다.
정리
제너레이터는 큰 데이터 집합의 순회, 복잡한 제어 흐름, 비동기 프로그래밍 등 다양한 상황에서 유용하게 사용될 수 있으며, 파이썬의 강력한 기능 중 하나입니다. 특히 메모리 효율성과 코드의 가독성 측면에서 매우 중요한 역할을 합니다.
추가
enumerate
는 파이썬의 내장 함수로, 순회 가능한(iterable) 객체를 인자로 받아 인덱스와 값을 동시에 반환해주는 역할
enumerate
의 사용 예
for index, value in enumerate(['a', 'b', 'c']):
print(index, value)
위 코드의 출력 결과는 다음과 같습니다:
0 a
1 b
2 c
enumerate
의 매개변수
enumerate
함수는 두 개의 매개변수를 가집니다:
- iterable: 순회 가능한 객체 (예: 리스트, 튜플, 문자열 등)
- start: 인덱스의 시작 값을 지정할 수 있으며, 기본값은 0입니다.
for index, value in enumerate(['a', 'b', 'c'], start=1):
print(index, value)
위 코드의 출력 결과는 인덱스가 1부터 시작합니다:
1 a
2 b
3 c
정리
enumerate
함수는 순회 가능한 객체를 순회하면서 현재 인덱스와 해당 인덱스의 값을 동시에 반환해주는 유용한 함수입니다. for
루프와 함께 사용하면 코드를 더 깔끔하고 읽기 쉽게 만들 수 있습니다.
반응형
댓글