728x90
yield
- 호출한쪽으로 프로그램 제어를 넘겨주는 키워드
- 함수 내에서 사용하며, generator객체를 생성
return vs yield
>>> print(return_abc())
['A', 'B', 'C']
>>> print(yield_abc())
<generator object yield_abc at 0x7f4ed03e6040>
알파벳 하나를 만드는데 1초가 걸리는 함수
import time
def return_abc():
alphabets = []
for ch in "ABC":
time.sleep(1)
alphabets.append(ch)
return alphabets
def yield_abc():
for ch in "ABC":
time.sleep(1)
yield ch
return
for ch in return_abc():
print(ch)
# 3초 경과
A
B
C
yield
for ch in yield_abc():
print(ch)
# 1초 경과
A
# 1초 경과
B
# 1초 경과
C
만약에 세개의 알파벳이 아닌 백개, 천개, 만개의 알페벳을 제공해야하는 경우
return 방식에서는 첫번째 결과값을 얻는데 백초, 천초, 만초가 걸리는 반면에, yield 방식에서는 항상 일초가 걸림
즉, 제너레이터를 통해서는 결과값을 나누어서 얻을 수 있기 때문에 성능 측면에서 큰 이점이 있음
제너레이터(generator)
- Iterator를 생성해주는 함수를 의미
- 여러 개의 데이터를 미리 만들어 놓지 않고 필요할 때마다 즉석해서 하나씩 만들어낼 수 있는 객체
- 모든 값을 포함하여 변환하는 대신 호출할 때마다 한 개의 값을 리턴
728x90