이번 포스팅에서는 파이썬의 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 호출
- 객체 생성
- 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 |