python 함수 parameter 선언 부분에 *args, **kwargs를 가끔 보게 됩니다.
그렇다면, 위의 두개는 기존의 parameter들과 어떤 차이가 있을까요?
args는 arguments의 줄임말입니다.
앞에 (asterisk)가 있는 것을 주의깊게 보시면 됩니다. 뒤에 parameter 이름을 임의대로 정할 수 있습니다.
*args는 여러개의 인자를 함수에 전달할 때 쓰입니다.
위 처럼 여러 개의 인자를 받기 위해서 *args의 형태로 parameter를 작성합니다.
kwargs는 keyword arguments의 줄임말입니다.
앞에 (asterisk)가 두개 붙어 있는 점이 차이점입니다.
**kwargs는 (키워드 = 특정 값) 형태로 함수를 호출할 수 있습니다.
- 다음 코드를 에러가 나지 않도록 고쳐봅시다.
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
위 에러는 데이터 타입이 잘못 되었다는 오류입니다. age는 '위치 인수'(position)인데 위의 코드에서는 keyword가 전달되었기 때문입니다.
그럼 서로 위치를 바꿔서 적용하면 되겠죠?
서로 위치를 바꾸는 방법도 있고, 이전 포스팅에서 다뤘던 것처럼
age=20로 parameter 이름에 맞춰 값을 전달해주는 것도 하나의 방법입니다.
- 다음 코드도 마찬가지로 에러가 나지 않도록 고쳐볼게요.
SyntaxError: invalid syntax
이번에는 문법 자체가 틀렸다는 오류가 나왔습니다.
adress는 position보다 뒤에 와야 되기 때문에 name, age 뒤에 오고, 가변키워드 인수 kwargs는 마지막에 위치해야 하기 때문에 서로 위치를 바꿔주면 됩니다.
- 마지막 코드도 고쳐보겠읍니다...
SyntaxError: invalid syntax
이번에도 2번째 코드와 마찬가지로 문법 자체가 틀렸다는 오류입니다.
parameter 순서에 따라 age를 가장 앞으로 옮겨주고 kwargs는 맨 마지막에 위치할 수 있도록 해줍니다. address는 그 바로 앞에 위치시켜줍니다.
실행 결과 위와 같이 출력되었습니다. 여기서 name의 default 값인 '아이유'를 이용하려면
다음처럼 args를 name 앞에 위치시켜주면 됩니다.
배우는 과정은 쉽지는 않지만 모든 것이 새롭기 때문에 즐거운 것 같습니다.