당당한 프로그래밍/파이썬

[Python] *args 와 **kwargs

당당한하수 2021. 10. 20. 18:01

args는 ARGuments의 약자이고, kwargs는 KeyWordARGuments의 약자이다.

python에서 *args 와 **kwargs는 함수에서 가변 인자를 받을 수 있도록 할 때, 사용한다.

( C언어의 포인터와는 전혀 무관한 개념이다 )

 

일반적으로 함수를 선언할 때, 고정된 매개변수(parameter)를 작성하여 정의한다.

def sum_numbers(a, b):
	sum_numbers = a + b
    return sum_numbers
   
sum_numbers(1, 2)
# 3

 때에 따라서, 두 개의 숫자가 아니라 다양한 숫자의 합을 구하는 함수를 필요로 할 때가 있다. 이때, 함수가 가변 인자를 받을 수 있도록 *args 와 **kwargs를 사용할 수 있다.

def sum_tuple(*args):
	sum_numbers = sum(args)
    return sum_numbers

# type(args)
# <type 'tuple'>


def sum_dict(**kwargs):
    sum_numbers = 0
    for key, value in kwargs.iteritems():
    	sum_numbers += value
    return sum_numbers

# type(kwargs)
# <type 'dict'>

sum_tuple(1, 2, 3, 4, 5)
# 15

sum_dict(a=1, b=2, c=3)
# 6

*args는 데이터 타입이 tuple인 가변 인자를 받을 수 있고, **kwargs는 데이터 타입이 dict인 가변 인자를 받을 수 있다. 

물론 2개를 동시에 사용하는 것도 가능하다. 그리고 매개변수를 선언할 때, 이름이 args와 kwargs 일 필요는 없다.

def sum_tuple(*num_tuple):
	sum_numbers = sum(num_tuple)
    return sum_numbers

def sum_dict(**num_dict):
    sum_numbers = 0
    for key, value in num_dict.iteritems():
    	sum_numbers += value
    return sum_numbers