* 와 ** 는 언패킹/패킹 연산자이다.
함수 정의 시 사용
파이썬 함수 호출에는 두 종류가 있다.
- positional arguments
- keyword arguments
여기서 개수가 가변적인 인자들을 갖는 함수를 정의할때 다음을 사용한다.
*args
(positional) arguments로 인자들을 튜플로 묶는다.
def f(*args):
print(args)
f(1, 2, 3)
>> (1, 2, 3)→ args는 tuple
**kwargs
keward arguments로 키워드 인자들을 딕셔너리로 묶는다. key=value 형태만 받는다.
def f(**kwargs):
pring(kwargs)
f(a=1, b=2)
>> {'a': 1, 'b': 2}→ kwargs는 dict
함수 호출 시 사용
* 리스트/튜플 → 언패킹
def f(a, b, c):
print(a, b, c)
lst = [1, 2, 3]
f(lst) # 패킹된 채로 들어가 하나의 인자로 간주, 에러 발생
>> TypeError: f() missing 2 required positional argument: 'b', 'c'
f(*lst) # 언패킹
>> 1 2 3** 딕셔너리 → 언패킹
def f(a, b):
print(a, b)
d = {'a': 1, 'b': 2}
f(**d) # f(a=1, b=2)와 동일