Python

[Python] *args / ** kwargs

비번변경 2022. 8. 8. 21:57

개요

파이썬 코드를 보다 보면 아래와 같이 *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 전달 형태

이제 *args를 사용하여 add 함수를 다시 정의해본다.

def add(*args):
    print("sum:", sum(args))

add 함수 재정의

3개의 인자를 받아도, 2개나 5개의 인자를 받아도 오류 없이 동작하는 것을 확인할 수 있다.

참고로 args 키워드로 받을 필요는 없다. *data라는 이름으로 받아도 상관없다.

 

 

**kwargs

Keyward Arguments를 의미하며, 함수에서 개수가 정해지지 않은 여러 개(n개)의 인자를 Key-Value 형태로 받을 때 사용한다. 즉, Dictionary로 전달받는다.

kwargs 전달 방식

전달받은 값은 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