개요
파이썬 코드를 보다 보면 아래와 같이 *args, **kwargs를 사용하는 함수가 존재한다.
def myFun1(*args):
...
def myFun2(**kwargs):
...
어떤 의미인지, 어떤 용도로 사용하는지 알아보도록 한다.
*args
Arguments를 의미하며, 함수에서 개수가 정해지지 않은 여러 개(n개)의 인자를 받을 때 사용한다.
예로 들어, 아래와 같이 3개의 숫자를 더하는 함수를 정의했다.
def add(x, y, z):
print("sum:", x + y + z)
add(10, 12, 13)
그리고 4개, 5개의 숫자를 더한 값을 계산할 필요도 있다고 해보자. add 함수는 3개의 인자만을 전달받도록 정의되었기 때문에 4개 이상의 인자를 받을 수 없다. 때문에 4개의 인자를 받아서 더하는 함수, 5개의 인자를 받아서 더하는 함수도 정의해야 한다.
이런 경우에 *args를 이용하여 가변 길이 인수를 전달함으로써 똑같은 함수를 중복하여 정의하는 것을 막을 수 있다.
*args는 튜플 형태로 전달된다.
이제 *args를 사용하여 add 함수를 다시 정의해본다.
def add(*args):
print("sum:", sum(args))
3개의 인자를 받아도, 2개나 5개의 인자를 받아도 오류 없이 동작하는 것을 확인할 수 있다.
참고로 args 키워드로 받을 필요는 없다. *data라는 이름으로 받아도 상관없다.
**kwargs
Keyward Arguments를 의미하며, 함수에서 개수가 정해지지 않은 여러 개(n개)의 인자를 Key-Value 형태로 받을 때 사용한다. 즉, Dictionary로 전달받는다.
전달받은 값은 Dictionary 사용하는 것과 동일하게 사용하면 된다.
def intro(**kwargs):
for k, v in kwargs.items():
print(f"{k} : {v}")
print(f"name : {kwargs['name']}")
참고 문서
https://codechacha.com/ko/python-difference-between-args-kwargs/
https://www.programiz.com/python-programming/args-and-kwargs