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'
가변인수는 순서가 중요합니다. 일반 일반인수 다음에 가변인수가 들어와야지 에러가 발생하지 않게 됩니다.
def func_param_with_var_args(name, age, *args):
print("name=", end=""), print(name)
print("age=", end=""), print(age)
print("args=", end=""), print(args)
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")
코드를 실행하면 다음과 같은 에러가 발생합니다.
SyntaxError: invalid syntax
이것도 마찬가지로 가변인수는 일반 인수 뒤에 있어야 하기 때문에 에러가 발생했기에 가변인수와 일반인수의 위치를 바꿔줍니다.
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 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")
코드를 실행하면 다음과 같은 에러가 발생합니다.
TypeError: mixed_params() got multiple values for argument 'address'
이러한 에러 방지를 위해 가변인수는 일반인수 뒤로 일반인수는 앞으로 이동시킵니다.
def mixed_params(age, name="아이유", address, *args, **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")