“제너레이터”는 메모리 효율적인 방식으로 반복자를 생성하기 위한 강력한 도구입니다. 제너레이터를 만드는 방법은 2가지 입니다. 1. 함수의 yield 문 사용. 2. 컴프리핸션 사용
대부분의 블로그에서 제너레이터의 예제는 피보나치 수열 문제를 예로 들어줍니다. 하지만 이런 수학 문제 예제는 제너레이터를 어떻게 활용해야 하는지에 대한 감을 떨어뜨립니다…
저는 피보나치보다는 데이터 처리에서 제너레이터가 어떻게 쓰이는 예제를 가져왔습니다. 아래 yield문을 사용한 제너레이터 사용법 섹션 글을 확인해주세요
제너레이터 개념은 장차 코루틴, 비동기 까지 이어질 수 있는 개념 입니다. 꼭 정리합시다~!
제너레이터 생성법
yield문 사용
함수의 반환을 return이 아니라 yield문을 사용하여 제너레이터를 만들 수 있습니다.
def simple_gen():
yield 1
yield 2
yield 3
gen = simple_gen()
print(next(gen)) # 결과: 1
print(next(gen)) # 결과: 2
print(next(gen)) # 결과: 3
yield from 사용
‘yield from
은 반복으로 yield 수행하겠다’를 의미합니다.
def simple_gen():
yield from range(1,4)
gen = simple_gen()
print(next(gen)) # 결과: 1
print(next(gen)) # 결과: 2
print(next(gen)) # 결과: 3
컴프리핸션 사용
튜플의 형태에서 컴프리핸션을 사용하여도 제너레이터를 만들 수 있습니다
chars = 'ABCD'
tuple_gen = (ord(s) for s in chars)
# print(list(tuple_gen)) # list로도 변환 가능
print(type(tuple_gen)) # <class 'generator'>
print(next(tuple_gen)) # 65
print(next(tuple_gen)) # 66
print(next(tuple_gen)) # 67
print(next(tuple_gen)) # 68
# print(next(tuple_g)) # Raise StopIteration error
제너레이터 활용법
아래 예제는 csv를 읽어서 데이터를 처리하는 예입니다. 이 예에서는 전체 데이터세트를 메모리에 로드하지 않고 대규모 데이터세트를 효율적으로 처리하기 위해 제너레이터를 사용하는 방법을 보여줍니다.
한 번에 한 행씩 읽고 생성하므로 메모리의 효율이 필요한 대용량 데이터 처리 시나리오에 적합합니다.
emplyees.csv
Name,Age,Department
Alice,28,Engineering
Bob,35,Marketing
Charlie,42,Human Resources
David,31,Engineering
Eva,29,Marketing
제너레이터를 사용한 데이터처리 코드
import csv
from collections import namedtuple
def read_employee_data(file_path):
with open(file_path, newline='') as csvfile:
csv_reader = csv.reader(csvfile)
headers = next(csv_reader) # 첫 행에서 해더 정보 추출
Employee = namedtuple('Employee', headers)
for row in csv_reader:
yield Employee(*row)
# employee 데이터를 처리하기 위한 제너레이터 사용
file_path = 'employees.csv'
employee_generator = read_employee_data(file_path)
print("Employee Information:")
for employee in employee_generator:
print(f"Name: {employee.Name}, Age: {employee.Age}, Department: {employee.Department}")
파이썬 코루틴 : 자바스크립트 비동기 콜백이 요기 있네?
파이썬 코루틴 (corutine)은 파이썬에서 비동기 프로그래밍*을 구현하는 데 사용되는 강력한 기능 중 하나입니다. 이를 이해하기 위해서는 제너레이터와 비동기 프로그래밍의 기본 원리에 대한 이해가 필요합니다…. Read more
파이썬 함수 사용법과 특징
python 공식 문서에서 함수 (function)은 다음과 같이 설명하였습니다. A series of statements which returns some value to a caller. It can also be passed zero or more arguments which may be used in the execution of the body…. Read more