Python

Python, 이터레이터(Iterator) & 제네레이터(Generator)

hwangyoungjae 2016. 4. 21. 20:04

-. 이터레이더(Iterator)

이터레이터 반복하다의 의미로서 for구문이 될수 있음

>>> for x in [1,2,3]: #리스트 순회

             print(x)

1

2

3

>>> for x in (1,2,3): #튜플 순회

             print(x)

1

2

3

>>> for x in {'one':1,'two':2}: #사전 순회

             print(x)

two

one

>>> for x in '123': #문자열 순회

             print(x)

1

2

3

 

for 구문은 이터레이터 안의 __next__() 메소드를 실행함

내부의 반복문을 관리해주는 역할

__next__()는 next()함수를 이용하여 실행할수도 있음

>>> s = 'abc'

>>> it = iter(s#iter함수는 순회가능한 객체에서 이터레이터를 가져옴

>>> it

<str_iterator object at 0x0105ACF0>

>>> next(it)

'a'

>>> next(it)

'b'

>>> it.__next__() #next()가 불러오는 메소드를 직접 실행함

'c

>>> next(it) #이터레이더가 종료되어 호출할 값이 없음

Traceback (most recent call last):

  File "<pyshell#59>", line 1, in <module>

    next(it)

StopIteration

 

 

-. 제네레이터

이터레이터를 만드는 도구

>>> def reverse(data):

             for index in range(len(data) -1, -1, -1):

                           yield data[index]

>>> for char in reverse('golf'):

             print(char)

f

l

o

g

 

>>> a = [1,2,3,4,5,6,7,8,9,10]

>>> sum(a)

55

>>> b = (i for i in range(11))

>>> sum(b)

55

 

a 1에서 10까지를 저장할 메모리 공간필요

b처럼 만들면 메모리공간 필요없음

 

제네레이터는 메모리절약측면에서 유리함