본문 바로가기
대학원 공부/programming language

Python : Basic : yield

by 월곡동로봇팔 2019. 12. 19.
def one_to_three():
...     """1, 2, 3을 반환하는 생성기를 반환한다."""
...     print('생성기가 1을 내어 놓습니다.')
...     yield 1
...     print('생성기가 2를 내어 놓습니다.')
...     yield 2
...     print('생성기가 3을 내어 놓습니다.')
...     yield 3
... 
>>> one_to_three_generator = one_to_three()

>>> next(one_to_three_generator)
생성기가 1을 내어 놓습니다.
1

>>> next(one_to_three_generator)
생성기가 2를 내어 놓습니다.
2

>>> next(one_to_three_generator)
생성기가 3을 내어 놓습니다.
3

yield 문이 포함된 함수를 실행하면 생성기가 반한된다.

생성기 next 함수안에 생성기를 넣어서 실행하면, 함수의 본문이 실행된다.

이 때, yield 문은 값을 내어준 후, 생성기의 실행을 일시정지 시킨다. 

다시 next 함수가 실행되면 정지했던 위치에서부터 다시 실행이 이어진다.

 

>>> cube_generator = (e ** 3 for e in range(1000000000))
>>> next(cube_generator)
0

>>> next(cube_generator)
1

>>> next(cube_generator)
8

생성기 식을 이용하면 원본 컬렉션을 다른 것으로 변환하는 종류의 생성기를 간편하게 만들 수 있다. 각 요소를 구하는 비용이 크거나 원본 컬렉션의 크기가 방대할 때는 리스트 조건제시법 대신 생성기 식을 사용하는 것이 유리하다.

댓글