반응형
- 컨테이너
- 이터레이블
- 이터레이터
- 제너레이터
- 제너레이터 표현식
- list, set, dict 컴프리헨션
개념 소개
1. 컨테이너
: 원소들을 가지고 있는 데이터 구조이며, 멤버쉽 테스트를 지원
: 메모리에 상주하는 데이터 구조로, 보통 모든 원소 값을 메모리에 가지고 있다. 파이썬에서 잘 알려진 컨테이너는 다음과 같다.
- list, deque
- set
- dict, defaultdict, OrderedDict, Counter
- tuple, namedtuple,
- str
⇒ 어떤 객체가 특정한 원소를 포함하는지 안하는지를 판단할 수 있으면 컨테이너
2. 이터레이블
: 대부분의 컨테이너는 Iterable(반복 가능한)이다. 그러나 더 많은 것들 또한 이터레이블이다. 일례로 파일 열기, 소켓 열기 등이다. 컨테이너가 일반적으로 유한할 경우, 이터레이블은 무한한 데이터 소스를 나타낼 수도 있다.
>>> x = [1, 2, 3]
>>> print(x)
[1, 2, 3]
>>> y = iter(x)
>>> z = iter(x)
>>> next(y)
1
>>> next(z)
1
>>> next(z)
2
>>> type(x)
<class 'list'>
>>> type(z)
<class 'list_iterator'>
⇒ y, z는 이터레이블 x로부터 값을 생성해내는 이터레이터의 객체이고 x는 이터레이블(반복 가능한)이다. y와 z는 상태를 가진다.
3. 이터레이터
그럼 Iterator란 무엇일까? 이는 **next()**를 호출할 때 다음 값을 생성해내는 상태를 가진 Helper 객체이다.
**next()**를 가진 모든 객체는 이터레이터이다.
즉 이터레이터는 값 생성기이다. 다음 값을 요청할 때마다 내부 상태를 유지하고 있기 때문에 다음값을 계산하는 방법을 알고 있다.
>>> from itertools import count
>>> counter = count(start=13)
>>> next(counter)
13
>>> next(counter)
14
>>> from itertools import cycle
>>>
>>> colors = cycle(["red", "white", "blue"])
>>>
>>> next(colors)
'red'
>>> next(colors)
'white'
>>> next(colors)
'blue'
>>> next(colors)
'red'
>>> next(colors)
'white'
4. 제너레이터
generator : iterator를 생성해주는 함수, 함수 안에 yield 키워드를 사용
특징
- iterable한 순서 지정
- 느슨하게 평가
- 함수의 내부 로컬 변수를 통해 내부 상태 유지
- 무한한 순서가 있는 개체를 모델링할 수 있다. (명확한 끝이 없는 데이터 스트림)
- 자연스러운 스트림 처리를 위 파이프라인으루 구성할 수 있다.
장점
⇒ 아주 작은 메모리로 대용량의 반복 가능한 구조를 순회할 수 있다는 것
Ref
반응형
'Programming > Python' 카테고리의 다른 글
[Boto3] RDS의 Parameter Group 값을 CSV 추출 스크립트 (0) | 2021.08.23 |
---|---|
[Python] Boto3로 Security Group rule 추가 (csv 파일 이용) (3) | 2021.08.14 |
[Python] 객체지향에서 필수 개념인 Property, Getter, Setter 간단히 알아보기 (0) | 2021.07.10 |
[Python] Decorator 개념 간단히 알아보기 (0) | 2021.07.10 |
[Python] 정규 표현식 정리 #1 - 기초 (2) | 2021.07.08 |