Python - '*args'와 '**kwargs'의 차이점

파이썬에서 아래와 같이 *args, **kwars를 사용하는 함수를 볼 때가 있습니다. arguments를 받는 인자인 것 같은데 ***같은 것 때문에 혼란스럽기만 합니다. 이번 글에서는 argskwars의 차이점에 대해서 알아보겠습니다.

def myFun1(*args):
    ...

def myFun2(**kwargs):
    ...

1. '*args' : 함수에서 여러개의 인자 n개를 받을 때

*args(arguments)는 함수에서 여러개의 인자, n개를 받을 때 사용합니다.

아래 함수는 3개의 인자를 받습니다. 하지만 4개의 인자를 받으려면, 함수를 수정해야 합니다. 아니면 인자 개수가 다른, 두개 이상의 함수를 만들어할지도 모릅니다.

def myFun(arg1, arg2, arg3):
    print('arg1:', arg1)
    print('arg2:', arg2)
    print('arg3:', arg3)

myFun('Hello', 'World', 'Python')

만약 정해지지 않은 n개의 인자를 받고 싶을 때, 다음과 같이 *args를 사용할 수 있습니다. 개발 중에, 이 함수에 2개 또는 4개의 인자를 전달할 필요가 있을 때에도 함수는 1개만 구현하면 됩니다.

def myFun(*args):
    print('args:', args)
    for arg in args:
        print(arg)

myFun('Hello', 'World')

myFun('Hello', 'World', 'Python', '!!!')

Output:

args: ('Hello', 'World')
Hello
World

args: ('Hello', 'World', 'Python', '!!!')
Hello
World
Python
!!!

'*args'의 특징

  • args 앞에 *를 1개 붙여야 합니다.
  • n개의 인자를 Tuple로 전달합니다.

2. '**kwargs' : 함수에서 여러개의 인자 n개를 key-value 형태로 받을 때

**kwargs(keyword arguments)는 함수에서 여러개의 인자 n개를, key-value 형태로 받을 때 사용합니다.

아래 코드에서 key1 = value2, key2 = value2 ...처럼 딕셔너리로 인자를 전달합니다. 그럼 함수에서 딕셔너리로 인자를 받아서 사용할 수 있습니다.

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

    print('arg1:', kwargs['arg1'])
    print('arg2:', kwargs['arg2'])
    print('arg3:', kwargs['arg3'])

myFun(arg1 ='Hello', arg2 ='World', arg3='Python')

Output:

{'arg1': 'Hello', 'arg2': 'World', 'arg3': 'Python'}
key = arg1, value = Hello
key = arg2, value = World
key = arg3, value = Python
arg1: Hello
arg2: World
arg3: Python

'**kwargs'의 특징

  • kwargs 앞에 **를 붙여야 합니다.
  • n개의 인자는 key와 value를 갖고 있고, 딕셔너리로 전달합니다.

3. '*args'와 '**kwargs'를 함께 사용하는 예제

아래 코드는 *args**kwargs를 함께 사용하는 예제입니다.

def myFun(*args, **kwargs):
    for arg in args:
        print(arg)

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

myFun('This', 'is', 'an example', arg1 ='Hello', arg2 ='World', arg3='Python')

Output:

This
is
an example
key = arg1, value = Hello
key = arg2, value = World
key = arg3, value = Python

References

Loading script...

Related Posts

codechachaCopyright ©2019 codechacha