3~6번의 경우, 값을 2개 이상 받는 parameter들이 있어서 직관적으로 순서를 정해야하는 게 이해됐지만, 1,2번의 경우 처음엔 순서대로 알아서 들어가면 되지않나..? 라고 생각했다.
하지만 default value parameter라고 할지라도, 값을 새로 지정해주면 변경된 값으로 출력되는 게 가능하다.
그러므로, 3~6번의 경우와 같이 순서를 지정하지 않으면 어떤 값이 어떤 parameter에 들어가는 지 명확해지지 않기 때문에 정확한 순서에 맞게 정의해줘야 하는 것 같다.
아래는 예제들을 통해 배운 내용을 학습해 본 결과다.
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)
해당 코드를 실행하면 아래의 에러메세지가 출력된다.
func_param_with_var_args("정우성", "01012341234", "seoul", 20)
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
*args에 "01012341234", "seoul", 20이 모두 할당되어 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", )
name=정우성
age=20
args=('01012341234', 'seoul')
1-1의 순서에 맞춰 다시 설정해주고 값이 정상적으로 출력되는 걸 확인!
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, **kwargs, address=0):
SyntaxError: invalid syntax
1-1의 순서를 참고해서 다시 정렬해줘서 오류를 해결할 수 있었다.
def func_param_with_kwargs(name, age, address=0, **kwargs):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("address=",end=""), print(address)
print("kwargs=",end=""), print(kwargs)func_param_with_kwargs("정우성", "20", address="seoul", mobile="01012341234")
name=정우성
age=20
address=seoul
kwargs={'mobile': '01012341234'}
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")
Q2와 같은 케이스로 1-1의 순서에 맞게 다시 수정해주었다.
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