함수 내에서 사용하는 arguments의 순서
default value parameter : 초기값이 정해진 매개변수(기본매개변수). 함수를 호출할 때 변경 가능하다.
non-default value parameter : 함수 호출시 무조건 인자의 값을 설정하여야 한다.
함수 호출시 default value parameter 를 non-default value parameter 보다 앞에 정의하면 다음과 같은 에러가 발생한다.
SyntaxError: non-default argument follows default argument
default 값이 정의된 parameter가 default 값이 정의 되지 않은 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)
# 함수 호출 결과
Traceback (most recent call last):
File "/Users/apple/Desktop/..py", line 6, in <module>
func_param_with_var_args("정우성", "01012341234", "seoul", 20)
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
age
인자는 non-default keyword-only argument 이므로 함수를 호출할때 값을 '='을 써서 값을 설정해 주어야 한다.
# 수정 후 코드
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
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 "/Users/apple/Desktop/..py", line 8
def func_param_with_kwargs(name, age, **kwargs, address=0):
^
SyntaxError: invalid syntax
**kwargs
는 parameter 우선순위에 따라 제일 마지막에 위치하여야 한다.
# 수정 코드
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
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 "/Users/apple/Desktop/..py", line 17
def mixed_params(name="아이유", *args, age, **kwargs, address):
^
SyntaxError: invalid syntax
**kwargs
는 parameter 우선순위에 따라 제일 뒤로 가야 한다. age는 positional argument 이므로 제일 앞으로 보내준다.
# 수정 후 코드
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