python 함수 parameter 선언 부분에 *args, **kwargs를 가끔 보게 됩니다.

그렇다면, 위의 두개는 기존의 parameter들과 어떤 차이가 있을까요?

*args

args는 arguments의 줄임말입니다.
앞에 (asterisk)가 있는 것을 주의깊게 보시면 됩니다. 뒤에 parameter 이름을 임의대로 정할 수 있습니다.
*args는 여러개의 인자를 함수에 전달할 때 쓰입니다.


위 처럼 여러 개의 인자를 받기 위해서 *args의 형태로 parameter를 작성합니다.

**kwargs

kwargs는 keyword arguments의 줄임말입니다.
앞에
(asterisk)가 두개 붙어 있는 점이 차이점입니다.
**kwargs는 (키워드 = 특정 값) 형태로 함수를 호출할 수 있습니다.

Question

  1. 다음 코드를 에러가 나지 않도록 고쳐봅시다.

TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'

위 에러는 데이터 타입이 잘못 되었다는 오류입니다. age는 '위치 인수'(position)인데 위의 코드에서는 keyword가 전달되었기 때문입니다.

그럼 서로 위치를 바꿔서 적용하면 되겠죠?

서로 위치를 바꾸는 방법도 있고, 이전 포스팅에서 다뤘던 것처럼

age=20로 parameter 이름에 맞춰 값을 전달해주는 것도 하나의 방법입니다.

  1. 다음 코드도 마찬가지로 에러가 나지 않도록 고쳐볼게요.

SyntaxError: invalid syntax

이번에는 문법 자체가 틀렸다는 오류가 나왔습니다.

adress는 position보다 뒤에 와야 되기 때문에 name, age 뒤에 오고, 가변키워드 인수 kwargs는 마지막에 위치해야 하기 때문에 서로 위치를 바꿔주면 됩니다.

  1. 마지막 코드도 고쳐보겠읍니다...

SyntaxError: invalid syntax

이번에도 2번째 코드와 마찬가지로 문법 자체가 틀렸다는 오류입니다.

parameter 순서에 따라 age를 가장 앞으로 옮겨주고 kwargs는 맨 마지막에 위치할 수 있도록 해줍니다. address는 그 바로 앞에 위치시켜줍니다.

실행 결과 위와 같이 출력되었습니다. 여기서 name의 default 값인 '아이유'를 이용하려면

다음처럼 args를 name 앞에 위치시켜주면 됩니다.

배우는 과정은 쉽지는 않지만 모든 것이 새롭기 때문에 즐거운 것 같습니다.

0개의 댓글