[Python] yield

golony·2022년 7월 22일
0

개발

목록 보기
12/23

개요

FastAPI 튜토리얼을 보던 중, 처음 본 키워드 yield에 대해 알아보자.
(사실 어디선가 본 기억은 있는데, 이번기회에 정리 해보기로 했다.)

yield: 함수에서 Generator를 반환하는 키워드

함수에서 List를 반환하는 것과 유사하나, Generator 라는 객체는 반환한다는 점에서 차이가 있음

List vs Generator

  • 함수에서 List를 반환하는 경우, 모든 내용을 메모리에 담아놓고 시작
  • 함수에서 Generator를 반환하는 경우, 리턴된 1개의 값을 메모리에 담고 처리 => 필요시 값을 하나씩 생성해서 사용

간단한 실험

yield 키워드에 대해 정리하던 중 궁금한게 생겼다.

  • Generator도 리스트처럼 어떠한 객체에 yield로 반환한 값을 담아두었다가 꺼내쓰는 걸까? => 메모리에 담지 않는다는 설명과 맞지않음
  • 함수 내에서 yield를 만나면 거기서 멈추는 걸까?

실험해보자

def yield_test():
    print('yield_test 1')
    yield 1

    print('yield_test 2')
    yield 2

    print('yield_test 3')
    yield 3

    print('yield_test 4')
    yield 4

    print('yield_test 5')
    yield 5

for i in yield_test():
    print(i)

디버거로 실행해보았을때, yield 키워드를 만난 지점에서 함수의 실행이 멈춘다는 것을 확인할 수 있었다.

참고자료

profile
더 나은 세상으로 나아가는 서비스를 만들고 싶습니다.

0개의 댓글