파이썬(python) - 이터레이터(iterator), 제너레이터(generator)
- 이터레이터(iterator)
- 내부의 반복문을 관리하는 역학을 해주는 객체
- 순회 가능한 객체의 요소를 순서대로 접근할 수 있는 객체이다.
- for 구문은 이터레이터 안의 __next__()메서드를 싱행한다.
- __nex__t() 는 현재 이터레이터가 가리키고 있는 객체의 요소를 리턴하고 객체의 다음 요소를 가리킨다.
>>> s = 'abc'
>>> it = iter(s) // iter 함수는 순회가능한 객체에서 이터레이터를 가져온다.
>>> it // 이터레이터 객체 이다.
<str_iterator object at 0x03FCACF0>
>>> next(it)
'a'
>>> next(it)
'b'
>>>it.__next__() // 이런식으로 직접 메서드를 실행 시킬 수 있다.
'c'
>>> next(it) //
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
StopIteration
- 제너레이터(generator)
- 이터레이터를 만드는 간단하고도 강력한 도구이다.
※함수가 호출되면 지역변수와 코드가 스택에 적재되고 코드를 수행한다. 그리고 함수가 끝나면
결과값을 호출한곳에 넘겨주고 함수 객체는 스택에서 사라진다.
-함수에 return 대신에 yield를 적어주면 함수를 끝내지 않고 호출한 곳에 갑을 전달 한다.
>>> def abc():
... data = "abc"
... for char in data:
... yield char
...
>>> abc
<function abc at 0x040A1228>
>>> abc()
<generator object abc at 0x040A3378>
>>> it = iter(abc())
>>> next(it)
'a'
>>> next(it)
'b'
>>> next(it)
'c'
>>> next(it)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
StopIteration
>>> def abc():
... data = "abc"
... for char in data:
... return char
...
>>> next(it)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
StopIteration
- 함수의 상태를 그대로 보존시키고 다시 호출될 수 있다.
>>> b = (i for i in range(11))
>>> b
<generator object <genexpr> at 0x040A3328>
>>> sum(b)
55
>>> a= [1,2,3,4,5,6,7,8,9,10]
>>> sum(a)
55
-데이터를 미리 만들어 놓는 것이 아니라 필요할 때마다 데이터를 생성할 수 있어서 메모리 사용을 줄임.
'' 카테고리의 다른 글
파이썬(python) - 함수에서 구조화된 데이터 반환 (1) | 2011.10.28 |
---|---|
파이썬(python) - 해시(데이터 제자리에 넣기) (0) | 2011.10.27 |
파이썬(python) - 이터레이터(iterator), 제너레이터(generator) (0) | 2011.10.27 |
파이썬(python)-배열 & 메소드(데이터 정렬하기) 2 (0) | 2011.10.26 |
파이썬(python) -배열 안의 데이터(데이터 정렬하기) 1 (2) | 2011.10.26 |
파이썬(python) - 파일 안의 데이터(데이터 정렬하기) (0) | 2011.10.26 |
댓글을 달아 주세요