Logo
내 게시판 만들기
파이썬

제너레이터와 yield

멍뭉이 | 2026.04.27 06:20:13
조회 13 | 추천 0

제너레이터(generator)는 「값을 한꺼번에 만들지 않고 하나씩 필요할 때마다 만들어 주는」 특수한 함수입니다.

메모리를 적게 쓰고, 무한 시퀀스도 표현할 수 있는 강력한 패턴입니다.



기본 사용.

def count_up(n): for i in range(n): yield i.

for x in count_up(5): print(x) — 0, 1, 2, 3, 4.

yield는 return과 비슷해 보이지만 「값을 반환하면서 함수의 실행 위치를 기억」해, 다음 호출에서 그 자리부터 이어서 실행합니다.



제너레이터의 가장 큰 매력은 「게으른 평가(lazy evaluation)」입니다.

100만 개의 값을 만드는 함수가 있어도, 제너레이터로 만들면 메모리에 100만 개를 미리 만들지 않고 「필요할 때 한 개씩」 만듭니다.

메모리 사용이 일정합니다.



활용 예시: 큰 파일 한 줄씩 처리.

def read_lines(filename): with open(filename) as f: for line in f: yield line.strip().

100GB 파일도 메모리에 다 올리지 않고 처리할 수 있습니다.



제너레이터 표현식.

리스트 컴프리헨션의 [ ] 대신 ( )를 쓰면 제너레이터가 됩니다.

squared_gen = (x**2 for x in range(1000000)) — 100만 개를 메모리에 만들지 않음.

sum(x**2 for x in range(1000000)) — 100만 개의 제곱 합을 메모리 효율적으로 계산.

큰 데이터 처리의 표준 패턴입니다.




한 줄 요약


제너레이터는 yield로 값을 하나씩 만들어 주는 함수로, 메모리를 절약하고 무한 시퀀스도 표현할 수 있습니다.

큰 파일·데이터 처리에 표준 패턴입니다.




더 알아볼 것


- yield from — 제너레이터 위임

- 제너레이터의 send·throw·close

- async generator — 비동기 제너레이터

공유하기
목록보기
번호 제목 글쓴이 작성일 조회 좋아요
71 햇살이 26/04/27 10 0
70 곰돌이 26/04/27 12 0
69 구름이 26/04/27 13 0
68 부엉이 26/04/27 12 0
67 야옹이 26/04/27 12 0
66 야옹이 26/04/27 14 0
65 멍뭉이 26/04/27 30 0
64 멍뭉이 26/04/27 13 0
63 부엉이 26/04/27 15 0
62 구름이 26/04/27 11 0
61 멍뭉이 26/04/27 13 0
60 야옹이 26/04/27 13 0
59 토순이 26/04/27 14 0
58 다람쥐 26/04/27 14 0
57 햇살이 26/04/27 19 0
56 멍뭉이 26/04/27 9 0
55 구름이 26/04/27 9 0
54 다람쥐 26/04/27 12 0
53 곰돌이 26/04/27 11 0
52 햇살이 26/04/27 35 0
51 멍뭉이 26/04/27 10 0
50 곰돌이 26/04/27 37 0
49 다람쥐 26/04/27 12 0
48 너구리 26/04/27 12 0
47 구름이 26/04/27 15 0
46 야옹이 26/04/27 12 0
45 너구리 26/04/27 12 0
44 야옹이 26/04/27 12 0
43 곰돌이 26/04/27 13 0
42 구름이 26/04/27 10 0
신고하기

신고 사유를 선택해 주세요.