2020년 12월 6일 일요일

yield in Python (파이썬에서 yield)

Yield

순차적인 언어에서 약간 혼동하기 쉬운 키워드가 python에는 있습니다. 그중에서도  Yield가 있는데 의미상으로는 수확, 수율, 생산, 수확이 생기다. 등의 의미를 가지고 있습니다.


정의

그럼 yield의 기능을 한마디로 말하면, Iterables generator 입니다. 번역하자면 순환자를 가진 새성기쯤 됩니다. 말로는 표현이 힘들고 예를 들어 보도록 하겠습니다.


예제

def createGenerator():
yield 2
yield 3
yield 1
for i in createGenerator():
print(i)

실행결과


2
3
1

가장 일반적인 예제입니다. 여기에서는 실행순서가 나타나지 않아서 궁금한점이 생기게 됩니다. 즉 yield 2, yield 3,yield 1 순서로 호출될때 2,3,1 순서로 쌓이게 되는것인지 궁금한것 입니다. 결론을 정리하자면 createGenerator() 함수가 호출될때 yield 키워드에서 멈추게 되고 다시 createGenerator()함수를 호출되면 이전 yield 호출된 이후부터 실행되는 방식입니다. return과 비슷하면서도 조금 다른 형태의 키워드입니다.

위 예제에 로그를 추가하여 실행순서를 생각해보시면 이해가 빠를것 같아서 준비하였습니다.


로그가 포함된 예제

def createGenerator2():
print("createGenerator2 2")
yield 2
print("createGenerator2 3")
yield 3
print("createGenerator2 1")
yield 1
for i in createGenerator2():
print(i)

실행결과

createGenerator2 2
2
createGenerator2 3
3
createGenerator2 1
1


전체 예제

https://github.com/donarts/sourcecode/blob/main/python/example/1_yield.py




댓글 없음:

댓글 쓰기