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

Python에서 함수가 여러 값을 반환하는 5가지 방법

Python의 함수는 여러 개의 값을 동시에 반환할 수 있으며, 반환된 값들은 변수에 바로 저장할 수도 있습니다. 함수는 하나의 변수만 반환하도록 제한되지 않고, 0개, 1개, 2개 또는 그 이상의 값을 자유롭게 반환할 수 있습니다.

이러한 다중 값 반환 기능은 Python의 기본 특성으로, C++이나 Java처럼 이를 지원하지 않는 많은 프로그래밍 언어와 차별화되는 장점입니다.

함수에서 여러 값을 반환하려면 요구 사항에 따라 튜플(tuple), 딕셔너리(dictionary), 클래스(class), 리스트(list), 또는 제너레이터(generator) 객체를 활용할 수 있습니다. 각 방법을 하나씩 살펴보겠습니다.

방법 1: 튜플(Tuple) 사용

def func(x):
    y0 = x + 1
    y1 = x * 3
    y2 = y0 ** 3
    return (y0, y1, y2)

튜플은 가장 간단한 방법이지만, 반환되는 값의 개수가 늘어나면 문제가 발생하기 쉽습니다. 만약 여섯 개 또는 일곱 개의 값을 반환해야 한다면 어떨까요? 계속해서 튜플로 묶을 수는 있지만, 어떤 값이 몇 번째 위치에 있는지 잊어버리기 쉬워집니다. 또한 값을 받는 곳에서 언패킹(unpacking)할 때도 코드가 다소 지저분해질 수 있습니다.

방법 2: 딕셔너리(Dictionary) 사용

더 나은 해결책 중 하나는 딕셔너리를 사용하는 것입니다.

def func(x):
    y0 = x + 1
    y1 = x * 3
    y2 = y0 ** 3
    return {'y0': y0, 'y1': y1, 'y2': y2}

딕셔너리를 사용하면 반환된 객체에서 특정 멤버를 이름(key)으로 꺼내올 수 있는 메커니즘이 생깁니다.

예를 들면 다음과 같습니다.

result['y1']

방법 3: 클래스(Class) 사용

또 다른 선택지는 클래스를 활용하는 것입니다. 클래스를 사용하면 목적에 맞게 설계된 전용 구조체(structure) 형태로 값을 반환할 수 있습니다.

class ReturnValue(obj):
    def __init__(self, y0, y1, y2):
        self.y0 = y0
        self.y1 = y1
        self.y2 = y2

def g(x):
    y0 = x + 1
    y1 = x * 3
    y2 = y0 ** 3
    return ReturnValue(y0, y1, y2)

방법 4: 리스트(List) 사용

리스트를 사용하는 방법도 있습니다. 값을 순서대로 추가한 뒤 한 번에 반환하는 방식입니다.

def func(x):
    result = [x + 1]
    result.append(x * 3)
    result.append(y0 ** 3)
    return result

방법 5: 제너레이터(Generator) 사용

yield 키워드를 사용하면 여러 값을 하나씩 순차적으로 반환할 수 있습니다. 반환해야 하는 값의 개수가 매우 많은 경우, 시퀀스(리스트나 튜플 등)를 한꺼번에 생성하면 시스템 리소스를 많이 소모할 수 있으므로 제너레이터가 효율적인 대안이 됩니다.

def func(x):
    y0 = x + 1
    yield y0
    yield x * 3
    yield y0 ** 3

어떤 방법이 가장 좋을까?

결국 어떤 방법을 선택할지는 개인의 취향과 프로젝트의 요구 사항에 달려 있습니다. 설정 작업이 가장 적은 딕셔너리 방식을 선택할 수도 있고, 딕셔너리가 무엇을 의미하는지 혼동하기 쉽다는 점을 피하고 싶다면 명확한 구조를 제공하는 클래스 방식이 좋습니다. 대량의 데이터를 메모리 효율적으로 처리해야 한다면 제너레이터를 활용해 값을 하나씩 생성하는 것이 현명한 선택입니다.