파이썬 함수에서 return대신 yield를 하면 무슨일이 일어나는지 보여드릴게요. 아래 코드를 보시면요, a라는 함수가 10번 돌면서 yield를 하고 있죠? 그리고 yield를 하기 직전에 a:반환할숫자
를 출력해보도록 할게요
def a():
for i in range(10):
print(f'a:{i}')
yield i
자 그러면 과연 이 함수는 어떤 값을 반환할까요? a()함수에서 반환받은 값을 하나씩 돌면서 아래와 같이 출력을 해볼게요.
for i in a():
print(i)
위의 코드를 실행하면 아래와 같이 0부터 9까지 출력을 하는데 함수안에서 출력한 것과 함수 바깥에서 출력한것이 하나씩 번갈아가면서 출력이 됩니다.
a:0
0
a:1
1
a:2
2
a:3
3
a:4
4
a:5
5
a:6
6
a:7
7
a:8
8
a:9
9
위의 결과에서 보시는 것과 같이 yield는 반환을 하고 다시 돌아와서 다음값을 또 반환하고 하는 식으로 바깥의 코드가 자기를 일을 다 마무리짓기를 않아도 되도록 처리가 되는 대로 하나씩 바깥에 던져줍니다. 이렇게 코드를 수행하면 함수 바깥쪽 코드가 결과를 한꺼번에 다 오기를 기다렸다가 한꺼번에 받아서 하는 것보다 받는대로 수행할수 있어서 일이 좀더 수월하겠죠.