위치 인수(positional arguments):
함수를 호출할 떄 전달되는 값이 매개변수에 순서대로 전달되는 인수
가변 인수(variable length arguments):
*인수명
함수를 호출할 때마다 인수의 개수를 바꿔서 전달할 수 있는 인수
가변 키워드 인수(variable length keyword arguments):
**인수명
함수를 호출할 때 딕셔너리 형태의 여러 인수를 전달할 있는 인수
이러한 종류의 인수들을 활용하여 함수를 호출할 때는 다음과 같은 순서를 지켜야 한다.
초기값이 설정되지 않은 위치 인수 > 초기값이 설정된 위치 인수 > 가변 인수 > 가변 키워드 인수
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'
따라서 다음과 같이 인수의 위치를 변경하면 에러를 해결할 수 있다.
def func_param_with_var_args(name, age, *args):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
func_param_with_var_args("정우성", "01012341234", "seoul", 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")
위 함수는 가변 키워드 인수가 위치 인수 앞에 위치했기 때문에 다음과 같은 에러가 발생한다.
SyntaxError: invalid syntax
따라서 다음과 같이 인수의 위치를 변경하면 에러를 해결할 수 있다.
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")
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")
위 함수는 초기값이 설정된 위치 인수, 가변 인수, 초기값이 설정되지 않은 위치 인수, 가변 키워드 인수, 초기값이 설정되지 않은 위치 인수 순으로 인수가 나열되어 있다.
따라서 다음과 같은 에러가 발생한다.
SyntaxError: invalid syntax
다음과 같이 인수의 위치를 변경하면 에러를 해결할 수 있다.
def mixed_params(age, *args, name="아이유", 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", address="seoul", mobile="01012341234")