파이썬 - Generator
Python Language
파이썬 - Generator
제너레이터 - Generator 란?
영단어 generate는 사전적으로 “생성하다, 생산하다”라는 의미이다.
제네레이터는 한 번에 하나씩 구성요소를 반환해주는 이터러블을 생성해주는 객체이다.
목적
가장 큰 목적은 메모리를 절약하는 것이다.
거대한 요소를 한꺼번에 메모리에 저장하는 대신 특정 요소를 어떻게 만드는지 아는 객체를 만들어서 필요할 때마다 하나씩만 가져오도록 한다.
개념
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
일반적인 LIST생성 방법
------------------------------
def func_list():
return ["A","B","C"]
for i in func_list():
print(i)
------------------------------
Generator를 통한 생성 방
------------------------------
def func_generator():
yield "A"
yield "B"
yield "C"
for i in func_generator():
print(i)
------------------------------
위 두 방식은 똑같은 출력을 한다.
하지만 메모리의 사용은 전혀 다르다.
LIST 방식
- 가장 익숙하고 많이 사용하는 방식이다.
- 함수를 실행하면 [“A”,”B”,”C”] 생성하고 return한다.
- 메모리 크기는 당연히 [“A”,”B”,”C”] 부분의 크기만큼 소모가 될 것 이다.
Generator 방식
- yield라는 생소한 방식이 사용된다.
- 게으른 반복자라는 별명이 있는 이 방식은 한번에 리스트가 생성되는 방식이 아닌 반복자가 넘어갈 때 마다 생성되는 방식이다.
- List보다 적은 메모리로 같은 출력을 할 수 있다.

사용 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 무한
def func_while():
while True:
yield "A"
yield "B"
yield "C"
# 리스트 형식으로 전달
def func_from():
yield from ["A", "B", "C"]
# yield 이외 다른 방식
gener = (i for i in "ABC")
for i in gener:
print(i)
This post is licensed under CC BY 4.0 by the author.