*args
: arguments (인자, 전달 인자)
def plus(a, b):
return a+b
print(plus(1,2)) # 3
두 숫자를 입력받아 더하는 함수를 만들어 봤다.
그런데 이 함수는 두개의 숫자만 더할 수 있다. 더 많은 숫자를 더하고 싶으면 이렇게 사용해야 할 것이다.
def plus(a, b):
return a+b
print(plus(1,plus(2,3)) # 6
하지만 10개, 극단적으로는 100개의 숫자를 더하고 싶다면 이렇게 일일이 작성하는 것은 무식한 짓이다.
여기서 사용하는 것이 바로 *args
이다. 함수의 인자에 *args
를 넣어주면 원하는 만큼 적어도 다 인자로 받아들여 들어온다.
def plus(*args):
res = 0
for num in args:
res += num
return res
print(plus(1,2,2,3,3,3,4,4,4,4)) # 30
이런 식으로 사용할 수 있다. print
라는 함수가 원하는 만큼 안에 적어주면 그 만큼 다 출력해주는 것처럼 *args
의 역할도 비슷하다.
**kwargs
: keyword arguments
전달값 argument를 전달하는 방법중 하나가 positional argument
이고 다른 하나가 keyword arguments
이다. 위에서 봤던 plus(1,2,2,3,3,3,4,4,4,4)
에서 이 숫자들은 다 positional argument
이다. 말 그대로 정해진 위치에 있는 인자, 함수를 만들 때 parameter의 순서와 함수를 호출할 때 arguments의 순서 그대로 들어가는 인자이다. 예를 들어, def divide(a, b)
라는 함수가 있고 divide(3,4)
라는 호출 명령이 있으면 a = 3
, b = 4
로 들어가게 된다. 이것이 positional argument
이다.
그러나 이렇게 순서대로 함수에 들어가지 않을 경우도 있다. keyword arguments
를 이용하면 순서대로 입력하지 않아도 된다. 예를 들어서,
def divide(a, b)
라는 함수가 있고 divide(b = 4, a = 3)
이라고 호출하면 b에는 4, a에는 3이 들어간다. 이것이 바로 keyword arguments
이다.
본격적으로 **kwargs
를 어떻게 사용하는지 보자.
def hi_bye(**kwargs):
for key, val in kwargs.items():
print(f"{key}={val}")
hi_bye(a="hi",b="bye")
**kwargs
에 들어오는 값은 딕셔너리 형태로 들어오게 된다. 위의 예시에서는 kwargs = { a : 'hi', b : 'bye'}
이렇게 말이다.
참고로 굳이
args
와kwargs
로 쓰지 않아도 된다. 그냥 파이썬 사용자들 간의 암묵적인 약속이고, 꼭 저렇게 사용하지 않아도 된다.