[파이썬] 함수의 가변 인자와 unpacking

가변 인자 (Variable Arguments)

파이썬에서는 함수 정의 시에 인자의 개수를 정확히 지정하지 않고, 가변 개수의 인자를 받을 수 있습니다. 이를 위해 가변 인자를 사용합니다. 가변 인자는 * 를 붙여 선언한 다음, 인자의 이름을 지정합니다. 가변 인자는 튜플 형태로 전달됩니다.

다음은 가변 인자를 사용한 간단한 예제입니다.

def print_numbers(*args):
    for number in args:
        print(number)
    
print_numbers(1, 2, 3, 4, 5)

이 예제에서는 print_numbers 함수가 가변 인자 *args를 받습니다. print_numbers 함수는 받은 인자들을 순회하면서 각각을 출력합니다. 따라서 print_numbers(1, 2, 3, 4, 5)를 호출하면 1부터 5까지의 숫자가 차례대로 출력됩니다.

Unpacking

가변 인자를 사용하면 여러 개의 인자를 튜플 형태로 받을 수 있게 됩니다. 그러나 때로는 이미 튜플이나 리스트 형태로 저장된 데이터를 가변 인자로 넘기기가 불편할 수 있습니다. 이때 사용할 수 있는 것이 unpacking입니다.

Unpacking은 리스트나 튜플 등의 iterable 객체를 가변 인자로 전달하는 방법입니다. 가변 인자 앞에 *를 붙여주면 파이썬은 iterable 객체를 자동으로 펼쳐서 가변 인자로 전달합니다.

다음은 unpacking을 사용한 예제 코드입니다.

numbers = [1, 2, 3, 4, 5]
print_numbers(*numbers)

위의 예제에서는 numbers라는 리스트를 정의한 후에 *numbers를 통해 unpacking하여 print_numbers 함수에 전달합니다. 이렇게 하면 리스트의 각 요소가 함수의 가변 인자로 전달됩니다. 결과적으로 print_numbers(1, 2, 3, 4, 5)와 동일한 결과를 얻을 수 있습니다.

Unpacking은 여러 개의 인자를 한 번에 전달할 때도 유용합니다. 예를 들어, 다음과 같은 함수가 있다고 가정해봅시다.

def add_numbers(x, y, z):
    return x + y + z

이 함수는 세 개의 인자를 받아서 합을 반환합니다. 만약 리스트나 튜플 형태로 이미 데이터가 저장되어 있다면 unpacking을 활용할 수 있습니다.

numbers = [1, 2, 3]
print(add_numbers(*numbers))

위의 코드에서 numbers[1, 2, 3]이라는 리스트입니다. *numbers를 사용하여 리스트의 각 요소가 add_numbers 함수의 인자로 전달됩니다. 즉, add_numbers(1, 2, 3)과 동일한 결과를 얻을 수 있습니다.

함수의 가변 인자와 unpacking은 파이썬에서 매우 유용한 기능입니다. 가변 인자를 활용하면 다양한 개수의 인자를 받을 수 있고, unpacking을 이용하면 이미 저장된 데이터를 편리하게 함수에 전달할 수 있습니다. 이러한 기능들을 적절히 활용하여 좀 더 유연하고 효율적인 코드를 작성할 수 있습니다.