Programming

; develop a program

Back-End/Python

[Python] Generator(제너레이터)

Clloud_ 2022. 10. 4. 12:19
반응형

이번 포스팅에서는 파이썬의 Generator(제너레이터)에 대하여 공부를 해보고자 한다.

 

아래의 글을 먼저 보고 오면 이해하는데 도움이 될 것이다.

2022.10.04 - [Python/파이썬 기초] - [Python] Iterator(반복자)

 

[Python] Iterator(반복자)

이번 포스팅에서는 파이썬의 Iterator(반복자)에 대하여 공부를 해보고자 한다. Iterable/Iterator Iterable은 반복 조회가 가능한 객체를 말한다. for in 문을 통해 값들을 순차적으로 제공해주는 객체라고

c11oud.tistory.com

 


Generator(제너레이터)

Generator 는 Iterable과 Iterator를 합친 기능을 함수 형태로 구현(정의) 한 것을 말한다.

 

Iterator 는 구현 시 클래스를 만들고 생성자, __iter__( ), __next__( ) 를 구현해야 해서 번거롭다.

Generator 는 함수 형태로 구하는 Iterator로 Iterable/Iterator 에 비해 구현이 간단하다.

제공할 원소들을 미리 메모리에 올리지 않고 그 값을 제공하는 시점에 올려서 제공한다. → Lazy 실행

 

 

Generator에서 값 반환

yield 반환 값

반환 값을 가지고 호출한 곳으로 돌아간다. 단 generator 가 종료되어 돌아가는 것이 아니라 일시정지 상태로 돌아간다. 다음 호출 시 그다음부터 실행된다.

 

return 반환 값

generator 를 종료한다.

StopIteration Exception 을 발생시킨다.

 

Generator 호출

  1. 객체 생성
  2. next(generator객체)

 

예제

Generator 를 생성한다.

def my_gen():
    v = 10
    yield v 

    v += 10
    yield v

    v += 10
    yield v

generator 를 호출하고 실행한다.

a = my_gen() 

next(a)
next(a)
next(a)
next(a)

[실행결과]

10
20
30
StopIteration

 


Generator 표현식 (Generator Comphrehension)

Generator Comprehension 은 리스트 Comprehension 동일한 구문인데 괄호를 ( ) 사용한다.

리스트 Comprehension 은 미리 리스트를 만들어 놓는다. 


Generator Comprehension 은 반복 가능한 객체만 만들고 실제 값에 대한 요청이 왔을 때 값을 생성한다.
메모리 효율이 리스트 Comprehension 보다 좋다.

 

예제

[i for i in [1, 2, 3, 4]]  # 리스트 컴프리헨션
{i for i in [1, 2, 3, 4]}  # 셋 컴프리헨션
{'v' + str(i): i for i in [1, 2, 3, 4]}  # 딕셔너리 컴프리헨션

generator를 생성한다. 

컴프리헨션 구문안의 Iterable의 원소들을 처리해서 제공하는 generator

g = (i**2 for i in [1, 2, 3, 4])

generator 를 실행한다.

print(next(g))
print(next(g))
print(next(g))
print(next(g))

[실행결과]

4
9
16
StopIteration

 


반응형

'Back-End > Python' 카테고리의 다른 글

[Python] 데코레이터(Decorator)  (4) 2022.10.05
[Python] Local(지역) 함수  (2) 2022.10.05
[Python] Iterator(반복자)  (0) 2022.10.04
[Python] 내장함수(Built-In Function)  (4) 2022.10.02
[Python] Pickle을 이용한 객체 입출력  (0) 2022.10.02