def example(a, b, c=None, r="w", d = [], *args, **kwargs) 1. `a, b : positional parameter` 2. `c = none : optional parameter` 3. `r= "w" : keyword parameter` 4. `d = [] : list parameter` 5. `*args : keyword-only` 6. `**kwargs : var-keyword parameter`
non-default value parameter
의 경우 값이 정해져 있지 않아도 기본적으로 keyword
=value
로 정의되어 있어서 parameter
로 설정한 값과 받아오는 값의 순서만 일치하면 자유롭게 값을 받아 사용이 가능합니다.
단점으로는
- 논리적 오류를 발생시킬 가능성이 있습니다.
- 인자에 어떤 타입이 들어오는지 파악이 어려워 코드의 가독성이 떨어집니다.
default value parameter
의 경우 함수 선언과 동시에 값이 정해지는 인자입니다.
기본 값이 존재하는 인자를 받을 때 사용하며 코드의 중복을 줄이고 가독성을 높이기 위해 사용합니다. 값이 이미 존재해도 변경이 가능합니다.
이러한 사항 때문에 default value parameter
가 non-default value
parameter
보다 항상 뒤에 위치해야 되는 규칙을 지켜줘야 됩니다. 위 규칙을 어길 시 에러가 발생합니다. 만약 default value parameter
, non-default parameter
형식으로 선언을 한 후 값을 하나만 보낸다면 어떤 parameter
에 어떤 값을 받아야 될지 이해하지 못하기 때문입니다.
def func_param_with_var_args(name, *args, age): print("name=",end=""), print(name) print("args=",end=""), print(args) print("age=",end=""), print(age) func_param_with_var_args("정우성", "01012341234", "seoul", 20)
[ 어떤 에러가 발생했는지? ]
missing 1 required keyword-only argument: age
[ 에러 수정 후 ]
def func_param_with_var_args(name, age, *args): print("name=",end=""), print(name) print("args=",end=""), print(args) print("age=",end=""), print(age) func_param_with_var_args("정우성", "01012341234", "seoul", 20)
순차적으로 값을 읽어들이는데 non-default
값이 2개임과 동시에 중간에 위치하는 바람에 age
인자를 어느 parameter
에 넣어줘야 하는지 이해를 하지 못해서 에러를 발생시킵니다.
위치 인수는 항상 가변 인수 앞에 위치해야 합니다.
def func_param_with_kwargs(name, age, **kwargs, address=0): print("name=",end=""), print(name) print("age=",end=""), print(age) print("kwargs=",end=""), print(kwargs) print("address=",end=""), print(address) func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul”)
def func_param_with_kwargs(name, age, address=0, **kwargs): print("name=",end=""), print(name) print("age=",end=""), print(age) print("kwargs=",end=""), print(kwargs) print("address=",end=""), print(address) func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul”)
def func_param_with_kwargs(name, age, **kwargs, address=0):
SyntaxError: invalid syntax
**kwargs
가 중간에 위치함에 따라 address
(위치인수)와 **kwargs
(가변키워드함수)의 순서가 바뀌면서 어느 parameter에 해당 값을 넣어줘야하는지 이해를 하지 못하고 에러를 발생시켰습니다.def mixed_params(name="아이유", *args, age, **kwargs, address): print("name=",end=""), print(name) print("args=",end=""), print(args) print("age=",end=""), print(age) print("kwargs=",end=""), print(kwargs) print("address=",end=""), print(address) mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
[ 에러 수정 후 ]
def mixed_params(age, name="아이유", *args, address, **kwargs): print("name=",end=""), print(name) print("args=",end=""), print(args) print("age=",end=""), print(age) print("kwargs=",end=""), print(kwargs) print("address=",end=""), print(address) mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234",address="seoul")
[ 어떤 에러가 발생했는지? ]
def mixed_params(name="아이유", *args, age, **kwargs, address):
SyntaxError: invalid syntax