반응형
2020/07/11 - [Coder/Python] - [python/자료형] 시퀀스 자료형 -2. Dict
1. Comprehension and Generator expression
1) Comprehension
iterable 한 객체를 생성하는 방법 중 하나
A. iterable
다수 요소(element)를 갖는 컨테이너에서 각 요소를 하나씩 가져오는 것이 가능함을 뜻하며 그러한 기능을 제공하는 객체를 iterator라고 합니다.
이는 곧 어떠한 요소를 반환할 수 있는 모든 객체는 iterable 하다.라고 해석할 수 있습니다.
B. 사용 예
ㄱ. LC(List Comprehension)
- 리스트 생성시 굉장히 자주 사용하는 기능
lists = [ v for v in range(10)]
ㄴ. SC(Set Comprehension)
- LC와 동일하되 생성하는 데이터 타입이 set
ㄷ. DC(dictionary Comprehesion)
- LC와 동일하되 생성하는 데이터타입이 dict
2) Expression
comprehension이지만 한 번에 모든 요소를 반환하지 않고 iterator에 의해 하나의 원소만 반환합니다. 이 기능 울 수행하는 iterator를 generator라고 별칭 합니다.
이러한 기능이 유용한 이유는 일반적으로 호출된 변수는 iterable 탐색 시 매번 전 범위를 색인하기 때문에 그 데이터가 대용량일수록 많은 메모리 소모와 CPU 점유율을 보이는데, generator를 사용하면 필요한 경우에 순차적으로 호출할 수 있기 때문입니다.(메모리도 현재 순서에 해당하는 값만 할당)
- generator를 사용하면 메모리와 CPU 사용 효율을 증대시킬 수 있음
- 함수 형태로 만드는 것도 가능
generator = ( x for x in range(10) )
next(generator)
>>> 1
next(generator)
>>> 2
def generator():
yield 1
yield 2
yield 3
yield 4
gen = generator()
type(gen)
>>> <class 'generator'>
next(gen)
>>> 1
next(gen)
>>> 2
def many_gen():
v = [1, 2, 3, 4]
yield x for x in v
list(many_gen())
>>> [1,2,3,4]
반응형