파이썬 함수를 선언할 때는 parameter를 받는 순서가 있고 아래와 같은 순서로 받는다.
def example(a,b,c=None,r='w',d=[],*ae,**ab):
a,b : optional parameter
c=None : positional parameter
r='w' : keyworded parameter
d=[] : list parameter
*ae : keyword only
**ab : var-keyword parameter
파라미터를 정의하는 순서없이 무작위로 넣으면 함수는 어떤 파라미터에 어떤 값을 넣어야할지 정할수 없다.
하지만! 파이썬3 이상부터는 파라미터 중간에 *을 넣으면 순서 상관없이 사용할 수 있다.
def example2(x="hello",y="bye",*,a,b):
pass
example2(a=2,b=3)
함수를 선언할때 위치 인수(positional arguments)와 가변 인수(variable length arguments)의 위치에 따른 오류
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)
위와 같이 코드를 작성하면 'age' 항목을 인식못해 TypeError가 발생한다.
TypeError: func_param_with_var_args() 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("정우성",20,"01012341234", "seoul")
이와같이 parameter 순서를 바꿔주면 해결된다.(*은 써봤지만 오류나서 pass😂)
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")
SyntaxError: invalid syntax
위의 코드는 **kwargs(variable length keyword argument) 뒤에 default parameter가 나왔기 때문에 오류가 생긴다.
👉 **kwargs와 address=0 파라미터 위치만 바꿔서 선언해주면된다.