아래의 코드는 파라미터의 순서에 문제가 있어 TypeError를 일으킵니다.
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)
파이썬은 다음과 같은 순서로 파라미터를 받아들입니다.
Regular positional args
-> Default args
-> Variable length positional args
-> Non-default args
-> Keyword-Only args with default (*args)
-> Variable length kwargs** (**kwargs)
age에 값을 할당해서 함수를 호출합니다.
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",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")
다음의 코드는 SyntaxError를 일으킵니다.
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")
다음의 코드 역시 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")
Keyword-Only Argument
인 address
가 올바른 위치를 찾지 못함.position
인자인 age
가 앞으로 이동되야함.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")