[python]함수의 인자 형태와 순서 (non)default value parameter, *args, **kwargs

지원석·2021년 12월 4일
0

TIL

목록 보기
3/8

Q1.함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 안 되는 이유?

non-default value parameter

non-default value parameter는 미리 값이 정해지지 않은 인자.
가장 흔하게 쓰이는 인자타입이며, 함수를 호출할 때 인자의 순서대로 인자값을 넣어주어야 한다.
위 결과에서 보여지는 non-default value parameter의 단점은

  • 논리적 오류를 발생시킬 가능성
  • 인자에 어떤 타입이 들어올 지 몰라 가독성이 떨어짐

하지만, 순서만 잘 맞춘다면 자유롭게 값을 받아 쓸 수 있음!

default value parameter

함수 선언시 미리 값이 정해지는 인자.
기본값이 존재하는 인자를 받을때 사용하며 코드의 중복을 줄이고 가독성을 높이기 위해 주로 사용한다.위의 예시를 통해 왜 non dafault value parameter가 dafault value parameter 보다 앞에 할당되어야 하는 지 알 수 있다.

Q2. 위치 인수 (positional arguments)와 가변 인수(variable length arguments)의 위치

**중요한 점은! 예를 들어, (name, args, age)처럼 name, age 매개변수 사이에 *args가 위치하게 되면 에러가 난다!
ex) TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age' 에러가 발생하는 이유는 만약 1,2,3,4,5 값을 입력시킨다고 가정하면 1은 name에 할당되지만 나머지 2,3,4,5는 args에 할당되어 age에 아무런 값도 할당되지 않는다.
*args ---> 튜플형태로 할당!

Q3. 가변 키워드 인수 (variable length keyword arguments)의 위치

**kwargs를 사용할 때 중요한 점은! 파이썬 함수에 있어 arguments의 위치 순서가 중요하다는 것은 위에서도 언급했다. 아래의 사진을 꼭 염두해두고!

kwargs ---> 딕셔너리 형태로 할당!
위 코드처럼 Default Arguments가 Variable Length Keyword Arguments 뒤에 위치하면 오류가 발생함.
SyntaxError: invalid syntax
**kwargs 와 address=0 의 위치를 바꿔주면 오류가 해결된다!

정상적인 결과는 아래와 같음!

Q4. 위치 인수와 키워드 가변 키워드 인수 (variable length keyword arguments)의 위치

이 함수에서도 3번과 같은 에러가 발생한다. Arguments들의 위치가 잘못되었는데 (age, *args, name="아이유", address, **kwargs) 순서로 바꿔주면,이와 같은 올바른 결과가 나온다!

0개의 댓글