positional arguments와 variable length arguments, variable length keyword 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)
TypeError: func_param_with_var_args()
missing 1 required keyword-only argument: 'age'
함수를 정의하는 과정에서는 문제가 없으나 인수를 받을 때 *args
가 non-parameter 보다 앞서서 인수를 모두 받게 되므로 age
parameter가 값을 받지 못해 TypeError
가 발생합니다.
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
간단하게 얘기하자면 parameter를 순서대로 작성하지 않아서 SyntaxError
가 발생한 경우입니다. **kwargs
가장 마지막에 작성되어야 할 함수 parameter 입니다. 이전에 *args
의 경우 순서가 바뀌어도 default 값을 미리 지정하면 문제가 없었던 반면 **kwargs
는 뒤에 parameter 가 오는 순간 SyntaxError
가 발생하게 됩니다.
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")
SyntaxError: invalid syntax
위 사항과 동일한 경우라고 보시면 되겠습니다.
함수의 parameter 순서를 도식화한 자료를 보며 마치겠습니다.
참고
https://livetodaykono.tistory.com/19
https://brunch.co.kr/@princox/180