29.4 함수에서 값을 여러 개 반환하기
지금까지 함수의 결과를 변수에 저장할 때 값을 한 개만 저장했습니다. 이번에는 함수에서 값을 여러 개 반환하는 방법을 알아보겠습니다.
함수에서 값을 여러 개 반환할 때는 다음과 같이 return에 값이나 변수를 ,(콤마)로 구분해서 지정하면 됩니다.
def 함수이름(매개변수): return 반환값1, 반환값2
그럼 두 수를 더한 값과 뺀 값을 반환하는 함수를 만들어보겠습니다. 다음과 같이 return으로 a와 b를 더한 값과 a에서 b를 뺀 값을 반환하도록 만듭니다.
>>> def add_sub(a, b): ... return a + b, a - b ...
이제 add_sub 함수에 10과 20을 넣고 결과를 x와 y에 저장합니다. 그리고 x와 y의 값을 출력해봅니다.
>>> x, y = add_sub(10, 20) >>> x 30 >>> y -10
x의 값을 출력해보면 10과 20을 더한 값인 30이 나오고, y의 값을 출력해보면 10에서 20을 뺀 값인 -10이 나옵니다. 이처럼 return은 값을 여러 개 반환할 수 있습니다.
add_sub 함수의 호출 과정을 그림으로 표현하면 다음과 같은 모양이 됩니다.
이렇게 return으로 값을 여러 개 반환하면 실제로는 튜플이 반환됩니다. 다음과 같이 add_sub의 결과를 변수 한 개에 저장해서 출력해보면 튜플이 반환되는 것을 볼 수 있습니다.
>>> x = add_sub(10, 20) >>> x (30, -10)
즉, 튜플이 변수 여러 개에 할당되는 특성을 이용한 것입니다(언패킹).
>>> x, y = (30, -10) >>> x 30 >>> y -10
함수에서 값 여러 개를 직접 반환할 때는 다음과 같이 return에 튜플을 지정해주면 됩니다.
def one_two(): return (1, 2)
사실 파이썬에서는 괄호 없이 값을 콤마로 구분하면 튜플이 되죠? 즉, 튜플 1, 2는 튜플 (1, 2)와 같습니다.
>>> 1, 2 (1, 2)
따라서 return 1, 2는 return (1, 2)와 의미가 같습니다.
def one_two(): return 1, 2 # return (1, 2)와 같음
물론 return에서 리스트를 직접 반환해도 됩니다. 이때도 반환값을 변수 여러 개에 저장할 수 있습니다.
>>> def one_two(): ... return [1, 2] ... >>> x, y = one_two() >>> print(x, y) 1 2