본문 바로가기
Python

[Python]파이썬의 가변 인자: *args와 **kwargs 이해하기

by teamnova 2024. 3. 2.


파이썬은 그 유연성과 사용의 용이성으로 유명합니다. 이 중 하나의 강력한 기능은 함수의 인자로 `*args`와 `**kwargs`를 사용하는 것입니다. 이 두 표현은 파이썬에서 가변 인자를 처리하는 방법을 제공합니다. 이번 포스트에서는 이들의 사용법과 작동 원리를 자세히 살펴보겠습니다.

`*args` - 위치 인자의 가변성

`*args`는 함수가 임의의 개수의 위치 인자를 받을 수 있도록 해줍니다. 이를 사용하면 함수 호출 시 제공하는 인자의 수가 고정되어 있지 않아도 됩니다. 함수 내부에서 `args`는 튜플로 처리되며, 전달된 모든 위치 인자를 포함합니다.

def print_args(*args):
    for arg in args:
        print(arg)

print_args('Hello', 'Python', 'World')



이 예제에서 `print_args` 함수는 세 개의 인자를 받고, 각각을 순서대로 출력합니다. `*args`를 사용함으로써, 함수는 세 개, 네 개, 더 많은 인자를 받을 수 있게 됩니다.

`**kwargs` - 키워드 인자의 가변성

`**kwargs`는 함수가 임의의 개수의 키워드 인자를 받을 수 있도록 해줍니다. 이 방법으로 함수는 호출 시 각기 다른 키워드 인자를 받을 수 있으며, 함수 내부에서 `kwargs`는 딕셔너리로 처리됩니다. 이 딕셔너리는 인자의 이름을 키로, 전달된 값을 값으로 가집니다.

def print_kwargs(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_kwargs(first='Python', second='is', third='awesome')



이 예제에서 `print_kwargs` 함수는 세 개의 키워드 인자를 받아, 각 키와 값을 출력합니다. `**kwargs`를 사용하면 함수는 다양한 이름의 인자를 받을 수 있습니다.

`*args`와 `**kwargs`의 결합 사용

이 두 표현은 함께 사용되어 함수가 위치 인자와 키워드 인자를 동시에 임의의 개수로 받을 수 있도록 할 수 있습니다.

def print_all(*args, **kwargs):
    for arg in args:
        print(arg)
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_all('Learning', 'Python', first='is', second='fun')


이 코드는 위치 인자와 키워드 인자를 함께 받아 출력합니다.

 

가변 인자와 배열의 차이점

가변인자의 예시를보면 인자를 배열로 주는것과 무슨 차이가 있는것인지 에 대한 의문이 들 수 있습니다. 
파이썬에서 가변 인자(*args와 **kwargs)를 사용하는 것과 배열(또는 리스트)를 매개변수로 넘겨주는 것 사이에는 중요한 차이점이 있습니다. 그 차이점은 바로 '매개변수의 생략 가능성'입니다.

배열을 매개변수로 넘겨주는 경우, 매개변수를 생략할 수 없으므로 빈 리스트를 전달하거나 None을 전달해야 합니다.
하지만 가변 인자를 사용하면 매개변수를 완전히 생략할 수 있습니다. 이로 인해 가변 인자는 함수 호출을 더 유연하게 만들어 줍니다.

 

이를 참조하여 파이썬 개발시 가변인자를 적절히 활용할 수 있으면 좋을 것 같습니다.