함수 선언시 default value parameter를 non-default value parameter 앞에 정의 하면 안되는 이유
def love_you(my_name = "정우성", your_name):
이와같이 default value parameter를 non-default value parameter 앞에 정의 할 경우
love_you("정우성"); 이와같이 함수를 호출할 때 어떤 파라미터에 대입하여야 하는지 모르기 때문에 금지됩니다.
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)
결과
name=정우성
args=('01012341234', 'seoul')
age=20
에러원인
func_param_with_var_args("정우성", "01012341234", "seoul", 20)
이전 코드에서는 20이라는 값이 age가 아닌 *args의 값 중 하나로 인식하여 에러가 발생하였습니다. 20 -> age=20으로 수정하여 에러를 수정하였습니다.
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", "seoul", mobile="01012341234")
결과
name=정우성
age=20
kwargs={'mobile': '01012341234'}
address=seoul
에러원인
def func_param_with_kwargs (name, age, **kwargs, address=0)
첫번째로 이전코드에서는 함수를 정의할 때 keyword arguments가 3번째 파라미터로 명시되어있는데 마지막에 정의해야하는것이 원칙이어서
def func_param_with_kwargs(name, age, address=0, **kwargs)
이와같이 순서를 변경하였고 호출시에도 파라미터의 순서를 func_param_with_kwargs("정우성", "20", "seoul", mobile="01012341234") 이와같이 수정하여 에러를 해결하였습니다.
def mixed_params(name="wecode", *args, age, 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("정우성", "01012341234", "male", age = 20 , address="seoul", mobile="01012341234")
결과
name=정우성
args=('01012341234', 'male')
age=20
kwargs={'mobile': '01012341234'}
address=seoul
에러원인
def mixed_params(name="wecode", *args, age, **kwargs, address)
이전코드의 함수 선언부분에서 keyword arguments 파라미터가 마지막에 명시되어있지 않아 이를 수정했고
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
호출하는 부분에서도 바뀐 순서대로 수정했습니다. 또한 호출시 age파라미터가 3번째가 아닌 첫번째에 있어 순서를 바꾸었고 2번째 인수로 가변갯수 인수들을 받고 있어 age와 address에 keyword를 명시해주어 에러를 수정했습니다.
위와같이 파이썬 파라미터의 순서에는 규칙이 정해져있습니다.
def parameterOrder(regular_position_arg, default_arg,
*variable_length_positional_args, keyword_only_arg, **variable_length_keyword_args):
return 'success'