제너레이터

제너레이터란 이터레이터를 만드는 것을 말합니다. 보통 함수는 return문을 이용하여 반환하지만 제너레이터는 yield를 이용하여 반환합니다.

그렇다면 왜 제너레이터를 이용해서 이터레이터를 만들어야 할까요?

입력

#1번예제
for i in range(10):

#2번예제
[i for i in range(10)]

예를 들어 보겠습니다. 0부터 10까지 출력하는 코드는 range를 활용하는 방법도 있지만 두번째 예제처럼 list로 변환하여 사용한다면 결과값은 같지만 선언과 즉시 메모리를 할당해야 하므로 메모리 효율성 측면에서 좋지 않습니다.

그러면 이렇게 한번 작성해보도록 할게요.

입력

def 숫자():
    yield 0
    yield 1
    yield 2
    yield 3
    yield 4
    yield 5
    yield 6
    yield 7
    yield 8
    yield 9

for i in 숫자():
    print(i)

출력

0
1
2
3
4
5
6
7
8
9

위 예제에서 숫자()메서드는 range와 똑같은 역할을 하게됩니다. 순회를 하면서 다음 값만을 지칭하고 있다는 것입니다.

결과값도 똑같죠?

이번에는 while문을 이용해서 짝수만을 출력해보도록 하겠습니다.