함수의 'parameter'에 Default 값을 정의해 줄 수 있습니다.
Default 값이 정의된 'parameter'는 함수가 호출될 때 값이 넘겨지지 않아도 됩니다.
값이 넘겨지지 않는 경우 Default 값이 자동으로 넘겨집니다.
만약 Default Value Parameter를 Non-default Value Parameter 앞에 선언하면 Syntax Error가 발생합니다.
def love_you(my_name = "홍길동", your_name):
print(f"{my_name} loves {your_name}")
love_you("김철수")
> Traceback (most recent call last):
File "python", line 1
SyntaxError: non-default argument follows default argument
love_you 함수에 "김철수"라는 인자를 넣어 호출하게 되면 your_name과 my_name 둘 중 어디에 값이 넘겨지는지 모르기 때문에 Error가 발생 합니다.
단, Parameter가 모두 Default Value라면 순서와 상관없이 Parameter 선언이 가능합니다.
def love_you(my_name = "홍길동", your_name = "김철수"):
print(f"{my_name} loves {your_name}")
위치 자료를 통해 에러 발생 원인과 조치 방법에 대해 알아보자
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
에러 원인 : func_param_with_var_args의 parameter age는
*args
뒤에 있어 keyword-only argument지만, argument를 regular positional argument로 되어 있다.
조치 : func_param_with_var_args의 parameter age를
*args
앞으로 옮기거나, argument를 keyword_only argument로 수정한다.
위치 자료를 통해 에러 발생 원인과 조치 방법에 대해 알아보자
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
에러 원인 : func_param_with_kwargs의 parameter
**kwargs
의 뒤에는 parameter가 선언 되어 있으면 안된다.(parameter position 자료 참고)
조치 : variable length keyword arguments인
**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")
SyntaxError: invalid syntax
에러 원인 : mixed_params의 parameter age는 regular positional argment이기 때문에 args 앞으로 선언되어야 하고, address는 keyword-only argument이기 때문에
**kwargs
parameter 뒤에 있으면 안된다.
조치 : Non-default value parameter는 Default value parameter 앞에 올 수 없으므로 age가 제일 앞에 선언되고, keyword-only argument인 address는
*args ~ **kwargs
사이에 선언되어야 한다.