본문 바로가기

여러개의 값 반환

Python 함수는 'return a, b, c' 형태로 여러 값을 튜플로 반환할 수 있습니다. 호출자는 이를 언패킹하여 개별 변수에 할당할 수 있습니다.

1. 여러 개의 값 반환

파이썬에서 함수는 여러 개의 값을 한 번에 반환할 수 있습니다. 이를 통해 함수에서 여러 결과를 쉽게 얻을 수 있습니다. 여러 값을 반환하려면, 그 값들을 쉼표로 구분하여 return 문에서 반환하면 됩니다. 반환된 값들은 튜플로 묶입니다. 이후 호출자는 이 튜플을 여러 개의 개별 변수에 분해하여 각 값을 개별적으로 접근할 수 있습니다.

아래는 두 숫자를 받아 그 합과 차를 반환하는 함수의 예시입니다.

def add_and_subtract(x, y):
    addition = x + y
    subtraction = x - y
    return addition, subtraction

# 함수 호출
result = add_and_subtract(5, 3)

# 결과 출력
print(result)  # 출력: (8, 2)

여기서, add_and_subtract 함수는 두 개의 값을 한 번에 반환합니다. 함수 호출 결과는 튜플 (8, 2)로 반환됩니다.

1.1 언패킹으로 받기

튜플로 받는 것보다는 아래처럼 각각의 변수로 나누어 받는 편이 훨씬 읽기 좋습니다. 이렇게 나누어 받는 것을 언패킹이라고 합니다.

def add_and_subtract(x, y):
    return x + y, x - y

addition, subtraction = add_and_subtract(5, 3)
print(addition)     # 8
print(subtraction)  # 2

변수의 개수가 반환값의 개수와 맞지 않으면 에러가 납니다.

def add_and_subtract(x, y):
    return x + y, x - y

a, b, c = add_and_subtract(5, 3)  # ValueError

쓰지 않을 값이 있다면 관례적으로 언더스코어(_)에 담습니다. 이 이름은 '이 값은 쓰지 않겠다'는 신호로 통합니다.

def get_user():
    return 'licat', 10, 'Jeju'

name, _, city = get_user()
print(name, city)

1.2 값이 많아지면 이름을 붙여주세요

반환값이 서너 개를 넘어가면 순서를 외우기 어려워지고, 순서를 헷갈려 잘못 받아도 에러가 나지 않아 위험합니다. 이럴 때는 딕셔너리나 namedtuple로 이름을 붙여 반환하는 편이 안전합니다.

from collections import namedtuple

User = namedtuple('User', ['name', 'age', 'city'])

def get_user():
    return User('licat', 10, 'Jeju')

user = get_user()
print(user.name, user.age, user.city)  # 순서가 아니라 이름으로 꺼냅니다.
print(user[0])                         # 튜플처럼 쓸 수도 있습니다.
여러개의 값 반환 - 견고한 파이썬 | 위니버시티