함수 정의할 때 *args, **kwargs 쓰는 건 대충 아는데 호출할 때 별표 붙이는 거랑 계속 섞여서 헷갈려요. 둘이 하는 일이 정반대인 것 같은데 정리가 안 됩니다.
def f(*args, **kwargs):
print(args)
print(kwargs)
f(1, 2, 3, x=1, y=2)
이렇게 하면 args는 (1, 2, 3) 튜플로, kwargs는 {'x': 1, 'y': 2} 딕셔너리로 묶여서 나오더라고요. 여기까진 이해했어요. 근데
nums = [1, 2, 3]
opts = {"x": 1, "y": 2}
f(*nums)
f(**opts)
이렇게 호출부에서 별표를 붙이면 또 반대로 풀려서 들어가는 것 같은데, 정의할 때랑 호출할 때 같은 별표인데 왜 하나는 묶고 하나는 푸는 건가요? 이거 구분하는 감을 어떻게 잡아야 할까요.