Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 함수에서 여러 값 반환하는 방법 완벽 가이드

Python에서는 함수가 여러 값을 한 번에 반환할 수 있습니다. 값을 딕셔너리(dictionary), 튜플(tuple), 리스트(list)에 담아 반환하거나, 쉼표(,)로 구분된 형태로 그대로 돌려줄 수도 있습니다. 이러한 자료형들은 여러 개의 값을 하나의 객체에 저장할 수 있게 해주며, 메인 프로그램에서 개별 값을 꺼내 사용할 수 있습니다.

이 글에서는 Python 함수에서 여러 값을 반환하는 다양한 방법을 실제 예제와 함께 자세히 살펴보겠습니다.

Python에서 여러 값 반환하는 방법

Python 함수에서 여러 값을 반환하는 대표적인 방법은 다음과 같습니다.

  • 여러 값을 담은 리스트 반환
  • 여러 값을 담은 튜플 반환
  • 여러 항목을 담은 딕셔너리 반환
  • 쉼표로 구분하여 여러 값 반환

위의 모든 방식으로 여러 값을 저장하고 반환할 수 있습니다. 그중에서도 쉼표로 구분해 반환하는 방법이 가장 간결하고 우아합니다. 이 방식은 "여러 개의 개별 값을 메인 프로그램으로 돌려준다"는 의도가 코드에 명확하게 드러나기 때문입니다.

Python의 return 문은 함수 내부의 값을 메인 프로그램으로 전달하는 역할을 합니다. 보통은 하나의 값을 반환하는 데 사용되지만, 여러 값을 반환할 때도 활용할 수 있습니다.

쉼표로 여러 값 반환하기

반환하고자 하는 값들을 쉼표로 구분하여 return 문 뒤에 나열하면 여러 값을 동시에 반환할 수 있습니다.

예제로 전자제품 매장의 판매 데이터를 분석하는 프로그램을 작성해 보겠습니다. 이 프로그램은 500달러를 초과하는 판매 건수평균 구매 금액을 계산합니다.

먼저 판매 금액 목록을 담은 배열을 정의합니다.

sales = [59.99, 240.00, 655.25, 75.99]

다음으로, 500달러를 초과하는 판매 건수와 평균 구매 금액을 계산하는 함수를 작성합니다.

def calculate_data(sales):
    over_limit = 0

    for s in sales:
        if s > 500:
            over_limit += 1

    average_purchase = sum(sales) / len(sales)

    return over_limit, average_purchase

이 함수는 for 루프를 사용해 리스트의 모든 판매 금액을 순회합니다. 판매 금액이 500달러를 초과하면 over_limit 변수의 값을 1씩 증가시킵니다. 그런 다음 전체 판매 금액의 합을 판매 건수로 나누어 평균 구매 금액을 계산합니다.

함수의 마지막에는 return 문을 사용해 over_limitaverage_purchase 두 값을 메인 프로그램으로 반환합니다.

이제 함수를 호출하고, 계산된 결과를 콘솔에 출력하는 코드만 추가하면 됩니다.

over_limit, average_purchase = calculate_data(sales)
print("{} sales were made over $500. The average purchase was ${}.".format(over_limit, round(average_purchase)))

round() 메서드를 사용해 평균 구매 금액을 반올림하고, 계산된 값들을 알려주는 메시지를 출력합니다. 프로그램을 실행해 보겠습니다.

1 sales were made over $500. The average purchase was $258.

프로그램이 500달러를 초과하는 판매 건수와 평균 구매 금액을 성공적으로 출력했습니다.

이 코드가 작동하는 원리는 다음과 같습니다. return 문은 반환된 값들을 자동으로 튜플(tuple)로 묶어 메인 프로그램에 전달합니다. 그리고 아래 코드에서 이 튜플을 두 개의 변수로 언패킹(unpacking)합니다.

over_limit, average_purchase = calculate_data(sales)

리스트나 튜플로 여러 값 반환하기

리스트와 튜플은 모두 여러 값을 저장할 수 있는 자료형입니다. 따라서 이들을 활용해 메인 프로그램으로 여러 값을 반환할 수 있습니다.

리스트나 튜플을 사용하는 것이 가장 적합한 경우는 반환하는 값들 사이에 어떤 연관성이 있을 때입니다. 물론 연관성이 없는 값들의 집합을 반환할 때도 이 방식을 사용할 수 있습니다.

앞선 예제를 조금 수정해, 리스트를 사용해 값을 반환하도록 바꿔 보겠습니다.

def calculate_data(sales):
    over_limit = 0
    for s in sales:
        if s > 500:
            over_limit += 1
    average_purchase = sum(sales) / len(sales)

    return [over_limit, average_purchase]

두 값을 하나의 리스트에 담아 반환하도록 변경했습니다. 이 리스트에는 500달러를 초과하는 구매 건수와 평균 구매 금액이 순서대로 들어 있습니다.

튜플 자료구조를 사용할 수도 있습니다. 이 경우 대괄호([]) 대신 소괄호(())로 감싸면 됩니다. 단, 튜플은 생성 후 값을 변경할 수 없는 불변(immutable) 자료형이라는 점을 고려해야 하며, 인덱스 위치가 고정되어 있다는 점에 유의해야 합니다.

메인 프로그램에서 이 값들에 접근하려면 인덱싱(indexing)을 사용해야 합니다.

values = calculate_data(sales)

print("{} sales were made over $500. The average purchase was ${}.".format(values[0], round(values[1])))

values[0] 문법으로 calculate_data() 함수가 반환한 리스트의 첫 번째 값, 즉 over_limit 값에 접근합니다. 마찬가지로 values[1] 문법으로 평균 구매 금액에 접근합니다.

실행 결과는 다음과 같습니다.

1 sales were made over $500. The average purchase was $258.

이전 예제와 동일하게 작동하지만, 이번에는 리스트를 사용해 값을 묶어 반환했다는 차이가 있습니다.

딕셔너리로 여러 값 반환하기

딕셔너리를 사용해서도 함수에서 여러 값을 반환할 수 있습니다.

앞선 예제에서는 반환하는 값이 두 개뿐이었기 때문에 언패킹 문법(값을 여러 변수에 나눠 담는 방식)을 사용하기 편리했습니다. 하지만 반환해야 할 값이 많아진다면, 각 값에 이름표(label)를 붙여주는 딕셔너리를 반환하는 것이 더 효율적일 수 있습니다.

이번에는 딕셔너리를 사용해 여러 값을 반환하도록 함수를 수정해 보겠습니다.

def calculate_data(sales):
    over_limit = 0

    for s in sales:
        if s > 500:
            over_limit += 1

    average_purchase = sum(sales) / len(sales)

    return { "limit": over_limit, "average": average_purchase }

이 함수는 두 개의 키(key)와 값(value)을 가진 딕셔너리를 반환합니다. "limit""average"라는 키를 통해 각각의 값을 명확하게 식별할 수 있습니다. 이제 새로운 반환 형식에 맞게 함수 호출 부분과 print 문을 수정해야 합니다.

values = calculate_data(sales)
print("{} sales were made over $500. The average purchase was ${}.".format(values["limit"], round(values["average"])))

함수가 반환한 딕셔너리를 values 변수에 할당한 후, 인덱싱 대신 키를 사용해 "limit""average" 값을 가져옵니다.

프로그램을 실행해 보겠습니다.

1 sales were made over $500. The average purchase was $258.

이전과 동일한 결과가 출력됩니다. 당연한 결과입니다. 계산 로직은 그대로 두고, 값을 메인 프로그램으로 반환하는 방식만 변경했기 때문입니다.

마무리

Python 함수에서는 딕셔너리, 튜플, 리스트 등을 활용해 여러 값을 반환할 수 있습니다. 이 자료형들은 모두 여러 값을 저장할 수 있으며, 여러 값 반환을 위한 별도의 전용 문법은 없지만 이러한 방법들이 훌륭한 대안이 됩니다.

쉼표로 구분하는 방식은 다루는 값의 개수가 적을 때 가장 간결하고 이해하기 쉽습니다. 반면, 함수에서 반환해야 하는 값이 많다면 각 값에 이름을 붙일 수 있는 딕셔너리를 사용하는 것이 좋습니다. 값의 의미가 명확해지고, 인덱스 번호 대신 키 이름으로 접근할 수 있어 코드의 가독성과 유지보수성이 크게 향상됩니다.

상황에 맞는 반환 방식을 선택하면 더 깔끔하고 읽기 쉬운 Python 코드를 작성할 수 있습니다.