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값은 키워드 인수라는 이유로 에러가 발생한다.
출처 : https://getkt.com/blog/python-keyword-only-arguments/
위에 사진으로 인수들의 순서를 확인해 보자.
가변인수 *args의 기준으로 앞에는 위치인수, 뒤로는 키워드 인수가 순서한다.
이 내용으로 보았을 때
def func_param_with_var_args(name, *args, age):
#위치인수 키워드인수
name은 위치인수, age는 키워드 인수임으로 에러 발생.
에러 없게 함수를 수정한다면
func_param_with_var_args("정우성", "01012341234", "seoul", age = 20)
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")
이렇게 수정하면 된다.
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")
다른 에러가 발생하는 코드가 있다. invalid syntax 문법 에러이다.
위의 사진을 참고한다면 **kwargs의 인수는 마지막의 위치해야한다.
def func_param_with_kwargs(name, age, address=0, **kwargs):
사진을 참고하여 **kwargs를 마지막에 위치 시키면 문제없이 출력된다.
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")
invalid syntax 문법 에러가 발생하는 코드가 있다. **kwargs 위치를 마지막에 위치시켜도
def mixed_params(name="아이유", *args, age, address, **kwargs):
에러가 발생한다 age값이 없다는 에러이다.
def mixed_params(name="아이유", *args, age, address, **kwargs):
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
위 코드를 보면 name = 20, args ( 정우성, 01012341234, male ) address = seoul, kwargs ( mobile : 01012341234 ) 가 들어 가지만 키워드 값인 age가 값이 없다.
따라서,
mixed_params( "정우성", "01012341234", "male" , age = 20, mobile="01012341234", address="seoul")
이와 같이 20이였던 인자를 위치 인자 뒤에 위치시키고 age = 20로 수정하면 에러 없이 출력 된다.