티스토리 뷰

[container: 컨테이너]


원소들을 가지고 있는 데이터 구조, 멤버십 테스트를 지원한다.


보통, 모든 원소값을 메모리에 가지고 있다.


잘 알려진 컨테이너는 다음과 같다.


list, deque, set, dict, tuple, str,....



컨테이너는 실세계의 컨테이너(박스, 컵보드, 집, 화물 등)처럼 생각하면 다루기 쉽다.


기술적으로, 어떤 객체가 특정한 원소를 포함하고 있는지 아닌지 판단할 수 있으면 컨테이너라고 한다.


대부분의 컨테이너가 자신이 포함하고 있는 모든 원소들을 생성하는 방법(요소의 접근)을 제공하지만


이기능은 컨테이너로 만드는게 아니라 이터레이블로 만든다.


모든 컨테이너가 이터레비을할 필요는 없다. 



[멤버십테스트]

assert 1 in [1, 2, 3]
assert not in [1, 2, 3]



[iterable: 이터레이블]


반복 가능한 객체, 순차적 접근가능한 객체로 대부분의 컨테이너는 또한 이터레이블(iterable) 하다.


그러나 더 많은 것들 또한 이터레이블 하다.


예로 파일 열기, 소켓 열기등이 있다. 


컨테이너가 일반적으로 


이터레이블을 반환할 수 있는 모든 객체가 가능하다,


대표적 iterable 타입 - list, dict, set, str, bytes, tuple, range





[iterator]


값을 차례대로 꺼낼 수 있는 객체


next() 함수로 데이터를 순차적으로 호출 가능한 객체


next() 를 호출할 때 다음 값을 생성해내는 상태를 가진 헬퍼 객체이다.


next() 를 가진 모든 객체는 iterator 이고, 값을 생성해 내는 방법과는 무관하다


즉, iterator 는 값 생성기다, 다음 값을 요청할 때 마다 내부 상태를 유지하고 있고


다음 값을 계산하는 방법을 알고 있다.



마지막 데이터를 불러 올수 없는경우 StopIteration exception 을 발생 시킨다


이것은 무한히 할수 없는 경우이고 


무한히 가저오는 itertools.cycle 같은 함수는 next() 를 통해서


무한히 값을 생성할 수 있다.




[generator]


특수한 형태의 iterator 라고  볼수 있다.


모든 제네레이터는 iterator 이다. (역은 성립하지 않는다)


모든 제네레이터는 lazy evalution 하다





https://mingrammer.com/translation-iterators-vs-generators/

댓글