>>> import time
>>> def countdown(n) :
while n > 0 :
# yield를 한 시점에서 함수가 종료되지 않고 다음 호출까지 대기
yield n
n -= 1
time.sleep(1)
print("end")
>>> cnt = countdown(3)
>>> type(cnt)
<class 'generator'>
>>> print(cnt)
<generator object countdown at 0x00A5FAF0>
>>> print(next(cnt))
3
>>> print(next(cnt))
2
>>> print(next(cnt))
1
>>> print(next(cnt))
end
Traceback (most recent call last):
File "<pyshell#124>", line 1, in <module>
print(next(cnt))
StopIteration
>>>
>>> for i in countdown(5) :
print(i)
5
4
3
2
1
end
>>>
Iterator
list, dictionary, set 은 셀수 있고, 반복가능하다. 그리고 갯수를 셀수 있다.
Generator
Iterator와 다른점은 전체 데이터 값을 메모리에 저장하지 않고, 즉석에서 값을 생성, 반환한다는 것이다.
선언한 사이즈 만큼 배열을 만들지 않기때문에 대량의 데이터를 끄집어낼때 실행시간 및 메모리 점유율등 자원활용 측면에서 유리하다.