프로그래밍/Python

Python yield

Terry Cho 2024. 8. 6. 01:43

`yield`는 Python에서 generator를 만드는 데 사용되는 키워드다. `yield`를 사용하면 함수의 실행을 일시 중지하고 값을 반환한 다음, 호출자가 필요할 때 실행을 재개할 수 있다. 이 기능을 사용하면 메모리를 효율적으로 사용하면서 큰 데이터 스트림을 처리할 수 있다. 이를 설명하기 위해 주어진 예제를 살펴보자.

def return_abc():
  print("From return_abc")
  return list("ABC")

def yield_abc():
  i=0
  for char in list("ABC"):
    yield(char)
    i +=1
    print(str(i) + " From yield_abc")

for ch in return_abc():
  print("Calling return_abc:"+ch)

print("="*5)
for ch in yield_abc():
  print("Calling yield_abc :"+ch)


이 코드는 두 개의 함수를 정의한다: `return_abc`와 `yield_abc`. 이 함수들은 모두 문자열 "ABC"의 문자를 하나씩 반환하지만, 동작 방식이 다르다.

1. `return_abc` 함수:
    - 리스트 `['A', 'B', 'C']`를 한 번에 반환한다.
    - `for` 루프에서 리스트의 각 요소를 순회하면서 출력한다.

2. `yield_abc` 함수:
    - generator를 반환한다.
    - `for` 루프 안에서 `yield` 키워드를 사용하여 하나씩 문자를 반환한다.
    - `yield`는 함수의 실행을 일시 중지하고 현재 값을 반환한 다음, 호출자가 다음 값을 요청할 때 실행을 재개한다.
    - 문자가 반환된 후에 루프 내에서 `i`가 증가하고, `i`의 값을 출력한다.

코드를 실행하면 다음과 같은 결과가 나타난다:

From return_abc
Calling return_abc:A
Calling return_abc:B
Calling return_abc:C
=====
Calling yield_abc :A
1 From yield_abc
Calling yield_abc :B
2 From yield_abc
Calling yield_abc :C
3 From yield_abc


출력 결과를 보면:

- `return_abc` 함수는 리스트 전체를 한 번에 반환하기 때문에 함수가 호출될 때 모든 문자를 출력한다.
- `yield_abc` 함수는 각 문자를 하나씩 반환하고 `yield`에 도달할 때마다 실행을 중지했다가, 다음 문자를 요청받으면 다시 실행을 재개한다. 각 문자를 반환한 후에 `i`를 증가시키고 출력한다.

따라서, `yield`를 사용하면 함수가 값을 하나씩 반환하면서 메모리를 효율적으로 사용할 수 있다. generator는 큰 데이터 집합을 처리할 때 특히 유용하다.

'프로그래밍 > Python' 카테고리의 다른 글

파이썬 전역 변수  (0) 2017.04.11
django 에서 REST API 만들기  (2) 2014.01.08
Python 공부 노트 11. Class  (0) 2014.01.03
Python 공부 노트 11. Module install  (0) 2014.01.02
Python에서 Open API 호출하기  (0) 2013.11.22