반응형
iterable
iterable 객체란 반복 가능한 객체를 뜻하며
iterable 객체에는 list, set, dict, tuple, str, bytes, range 가 있다
iterator
iterator 객체란 값을 차례대로 꺼낼 수 있는 객체를 뜻하며
iterable한 객체를 내장함수 또는 iterable객체의 메소드로 객체를 생성할 수 있습니다
파이썬 내장함수 iter()를 사용해 iterator 객체를 만들 수 있습니다
또한 next()를 사용해서 값을 차례로 꺼낼 수 있습니다
numbers = [1,2,3,4,5]
numbers_iter = iter(numbers)
next(numbers_iter) #1
next(numbers_iter) #2
next(numbers_iter) #3
next(numbers_iter) #4
next(numbers_iter) #5
#6번째 실행에서 StopIteration 이라는 예외가 발생
next(numbers_iter)
#
Traceback (most recent call last):
line 11, in <module>
StopIteration
generator
generator란 iterator를 생성해주는 함수이면서 내부에 yield 키워드를 사용한다
yield 를 사용 할때는 일반적인 함수에서 return 하는 것과 달리
yield 를 만날 경우, 해당 함수는 그 상태로 정지 되며, 반환 값을 next() 를 호출한 쪽으로 전달 하게 된다. 이후 해당 함수는 일반적인 경우 처럼 종료되는 것이 아니라 그 상태로 유지되게 된다. 즉, 함수에서 사용된 local 변수나 instruction pointer 등과 같은 함수 내부에서 사용된 데이터들이 메모리에 그대로 유지가 된다.
또 , generator를 사용하는 이유는 효율적인 메모리 사용량에 있다
import sys
>>> sys.getsizeof( [i for i in xrange(100) if i % 2] ) # list
536
# Generator Expression 으로 () 를 사용하여 generator 객체를 만들 수 있다
>>> sys.getsizeof( (i for i in xrange(100) if i % 2) ) # generator
80
보는 것과 같이 리스트로 만든 객체와 제너레이터로 만든 객체는 메모리 사용량에 큰 차이를 보인다
list에 있는 모든 데이터를 메모리에 저장하는 list 와 달리 generator는 next를 이용하여 값을 가져올때마다 메모리에 저장하는 방식이다
반응형
'Python' 카테고리의 다른 글
Class 예제(2) - 두 점 사이의 거리, 기울기 (0) | 2022.05.17 |
---|---|
Class 예제 (1) - 은행 계정 클래스 (0) | 2022.05.17 |
OOP (객체지향 프로그래밍) (0) | 2022.05.17 |
Python-Decorator(데코레이터) (0) | 2022.05.16 |
[21.05.03] *args 와 **kwargs (0) | 2022.05.03 |