반응형

2020/07/11 - [Coder/Python] - [python/자료형] 시퀀스 자료형 -2. Dict

 

[python/자료형] 시퀀스 자료형 -2. Dict

3. dict tuple, dict 와 함께 정말 많이 쓰는 자료형 중 하나 대표적인 hashtable 1) dict source = (('k1', 'val1'), ('k1', 'val2'), ('k2', 'val3'), ('k2', 'val4'), ('k2', 'val5')) dic1 = {} for k, v in s..

leo-bb.tistory.com

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]
반응형
복사했습니다!