generator와 iterator

si_yeon·2021년 12월 30일
0

generator란, 키워드 yield를 사용하여 iterator를 생성함으로써 그때 그때 필요한 값을 사용할 수 있는 기능이다.

이 링크를 보면 보다 자세한 정의가 나와있다.

그럼 iterator란 무엇일까!

우선 iterator는 iterable과는 좀 다른 의미를 가진다.

  • iterable (이터러블) : member를 하나씩 차례로 호출할 수 있는 객체이다.
    ex) list, tuple, dictionary, string 등
  • iterator(이터레이터) : next()메소드로 데이터를 순차적으로 불러올 수 있는 객체이다. 만일 더 이상 불러올 데이터가 없다면 StopIteration exception을 발생시킨다.

하지만, iterable 객체라고 해서 모두 iterator인 것은 아니다.

iter()함수를 사용하여 iterator로 만들어 줄 수 있지만,
이 함수를 쓰지 않더라도 for문으로 데이터를 순차적으로 불러오는 것이 가능하다.
(for문으로 looping 하는 동안 python내부에서 이 iterable객체를 iterator로 변환해준다고 한다.)

generator란

-generator란 앞서 말했듯이 키워드 yield를 사용하여 함수로부터 iterator를 생성해주는 함수이다.

-일반함수와의 차이점은 yield 뿐이다.

def generator(n):
    i = 0
    while i < n:
        yield i
        i += 1

g = generator(5)  #객체생성

for x in g:
    print(x)
    
>>>0
   1
   2
   3
   4

출처: https://bluese05.tistory.com/56 [ㅍㅍㅋㄷ]


위의 코드를 보면 yield가 어떻게 작동하는지 알 수 있다.

1. for문이 실행되면, 우선 generator함수가 호출된다.

2. 함수 실행 중 yield를 만나면 함수가 호출된 for문으로 가 print(x)를 우선 수행한다. 
그럼 첫번째 값인 0이 출력된다.

**그렇다고 generator함수가 끝난게 아니라 yield에서 값을 반환한 후 그대로 유지하고 있는 상태임

3. 반환이 된 후, 다시 함수로 돌아가 yield 이후 구문인 i += 1 부터 수행한다.

4. 이후에 2번 3번 과정을 반복하게 된다.

yield는 '양보하다'라는 뜻을 가지고 있다.
(밖으로 양보한다 라고 보면 됨)

따라서 객체를 생성하는 시점에 우리가 원하는 값을 반환하는게 아니고
for문을 통해 불러올 때 값을 하나씩 가져오는 것이다

정리하자면, generator는 많은 데이터를 메모리에 올려놓고 시작할 필요없이
현재 처리해야할 데이터를 하나씩 불러와서 사용할 수 있다.

0개의 댓글

관련 채용 정보