본문으로 건너뛰기
Minsing Log
뒤로 가기

yield가 뭐야?(feat.제너레이터)

Programming & CS

yield가 뭐야?

여타 함수는 return값을 함수 하나당 한개씩 반환할 수 있지만 yield 제너레이터는 return값을 여러번 나누어서 제공할 수 있다. (여러번 나누어서 제공한다는 것은 함수를 실행할때마다 yield한 순서대로 여러번을 리턴한다는것)

예제코드

def yield_abc():
  yield "A"
  yield "B"
  yield "C"
  
for ch in return_abc():
  print(ch)
  
'''
결과 값은
A
B
C
로 나온다.
'''

Generateor가 뭐야?

여러 개의 데이터를 미리 만들어 놓지 않고 필요할 때마다 즉석해서 하나씩 만들어낼 수 있는 객체를 의미.

왜써?

반환 값이 여러개 즉석해서 하나씩 만들 수 있다면 결과값을 나누어서 얻을 수 있어 성능 측면에서 개이득이다. 메모리 효율 측면에서 모든 결과 값을 return 키워드를 사용할 경우 모든 결과 값을 메모리 올려놓아야 하는 반면에, yield 키워드를 사용할 때는 결과 값을 하나씩 메모리에 올려놓습니다.

이러한 이유 때문에 좀 더 효율적인 프로그램을 작성할 수 있는 경우가 많다.

코딩테스트 할때 개꿀일듯?

예제코드 Case1)

import time

def return_abc():
  alphabets = []
  for ch in "ABC":
    time.sleep(1)
    alphabets.append(ch)
  return alphabets
for ch in return_abc():
  print(ch)
# 3초 경과
A
B
C

Case2)

import time

def yield_abc():
  for ch in "ABC":
    time.sleep(1)
    yield ch
    
for ch in yield_abc():
  print(ch)
  
'''
# 1초 경과
A
# 1초 경과
B
# 1초 경과
C

'''

참고자료 1. 제너레이터 네이스한 설명 2. 제너레이터 네이스한 설명

공개 여정 구독

글이 올라오면 이메일로 보내드릴게요.

개발, 창업, 배움, 실패와 회고를 짧고 솔직하게 기록합니다. 검색으로 스쳐가는 독자가 아니라 여정을 따라오는 팬을 만들기 위한 뉴스레터입니다.

뉴스레터는 준비 중입니다. 그동안 RSS 로 구독하거나 이메일 로 알림을 요청해 주세요.


이 글 공유하기:

댓글

GitHub 계정으로 로그인해 댓글을 남길 수 있습니다.


이전 글
Sorted() parameter key 값 lambda에 대하여
다음 글
__init__.py가 뭐야?