본문으로 바로가기

Python *args, **kwargs 란 무엇인가

category Coding/Python 2018. 8. 6. 17:05
반응형

예전부터 코드를 보다보면 인자로 *args, **kwargs를 받는 함수를 상당히 많이 볼 수 있었다.


def test(*args, **kwargs):

      ~~


대충 이러한 형태로 생긴것들을 말한다.

지금까지는 몰라도 크게 문제가 되는 부분도 없었고 굳이 찾아볼 필요성을 못느꼈는데,

이번에 진행하고 있는 프로젝트에서 해당 부분의 지식이 필요하여 제대로 찾아봤다.

일단 첫인상은 별로였다. C언어의 포인터를 보는 느낌으로 상당히 꺼려지는 느낌이랄까.

결론부터 말하자면 아래와 같다.


*args는 인자를 tuple형태로 받는다.

**kwargs는 인자를 dictionary 형태로 받는다. (key: value 형태)


위 두가지가 핵심 내용이므로 꼭 숙지하도록 하고 간단한 예제를 통해 살펴본다.

먼저 *args를 어떠한 형태로 사용하는지 설명한다.


def add(*args):
    sum = 0
    for i in args:
        sum += i

    return sum

print(add(1,2,3))

코드를 작성하고 실행시켜보면 6이 출력될것이다.

args는 튜플 형태로 인자를 받는다고 했다. 가변적인 크기로 인자를 받을 수 있다는 뜻인데,

위에 나와있는 add함수처럼, 인자가 가변적이라면 *args를 사용하는게 적합하다.


다음으로 **kwargs에 대해 설명한다.


def test(**kwargs):
    print(kwargs)

test(name='hide', age='27')

위처럼 코드를 작성하고 실행하면 {'name': 'hide', 'age': '27'}가 출력된다.

설명했던 것처럼 **kwargs는 dictionary 형태로 인자를 받기 때문에 key/value 쌍으로 인자를 넘겨줄 수 있다.

(참고로 말하자면 인자의 이름을 굳이 args, kwargs로 해줄 필요는 없다.

그냥 관습이라고 생각하면 편하고 *, **를 붙여주기만 하면 된다)


참고 : http://tastydarr.tistory.com/48

반응형