TIL 11 | Python default value parameter, non-default value parameter
python에서 default value parameter는 non-default value parameter 앞에 쓸 수 없다.
이유가 무엇일까 ❔❓❕
우선, non-default value parameter는 값이 정해져있지 않는 파라미터이다.
# non-default value parameter
def adorable(dog, name):
print(f"{dog} {name} so cute")
반대로 default value parameter는 값이 정해져 있는 파라미터이다.
# default value parameter
def adorable(dog="poodle",name="raon"):
print(f"{dog} {name} so cute")
# non-default value parameter랑 섞어서 사용할 수 있다.
def adorable(dog,name="raon"):
print(f"{dog} {name} so cute")
adorable("poodle")
# 호출의 결과값은 "poodle raon so cute" 로, default value parameter가 할당된 경우엔 따로 argument값을 주지 않아도 기본값 "raon"이 출력된다.
섞어서 사용하는 경우에 순서가 바뀔 때 에러가 발생한다.
def adorable(name="raon",dog):
print(f"{dog} {name} so cute")
SyntaxError: non-default argument follows default argument
발생하는 이유는 불확실성 때문이다. 간단하게 non-default 파라미터는 필수 입력값인데에 반해 default 파라미터는 필수가 아니기 때문에 이를 섞어서 사용하면 함수를 호출할 때 컴퓨터는 어디에 어느 argument를 매칭해야 하는지 알지 못해 순서를 맞춰서 non-default value parameter를 앞에 두고 default value parameter를 뒤에 둬야 한다.
여러 가지 에러와 에러를 수정하는 과정!
1.
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'
variable-length parameter 인 *args 뒤에는 keyword-only parameter 같은 타입이 올 수 있기 때문이다. 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)
출력값은 아래와 같다.
name=정우성
args=('01012341234', 'seoul')
age={'age': 20}
2.
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")
실행하면, 아래와 같은 에러가 발생한다.
File "main.py", line 1
def func_param_with_kwargs(name, age, **kwargs, address=0):
^
SyntaxError: invalid syntax
keyword-only parameter인 **kwargs 뒤에 default value parameter가 위치해 invalid syntax 에러가 발생했다. address=0을 앞으로 위치시켜주어 해결할 수 있다.
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")
출력값은 아래와 같다.
name=정우성
age=20
kwargs={'mobile': '01012341234'}
address=seoul
3.
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")
실행하면 아래와 같은 에러가 발생한다.
File "main.py", line 1
def mixed_params(name="아이유", *args, age, **kwargs, address):
^
SyntaxError: invalid syntax
파라미터의 순서를 정리해주면 에러를 해결할 수 있다.
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")
출력값은 아래와 같다.
name=정우성
args=('01012341234', 'male')
age=20
kwargs={'mobile': '01012341234'}
address=seoul
Author And Source
이 문제에 관하여(TIL 11 | Python default value parameter, non-default value parameter), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sehy/TIL-11-Python-default-value-parameter-non-default-value-parameter저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)