함수를 호출할 떄 전달되는 값이 매개변수에 순서대로 전달되는 인수를 의미하며, 가장 자주 사용되는 방식이다.
인수의 개수가 변할 수 있다느 의미이며, 가변인수를 전달받는 함수란 함수를 호출할 때, 인수의 개수를 다양하게 바꿔가며 사용할 수 있는 함수를 의미한다.
*arg를 사용을 사용하여 코드를 입력할땐 순서도 중요하다.
우선순위
================================================
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)
위 코드를 호출하면 오류가 발생한다.
이떄 , name, age 매개변수가 온다음 뒤에 *args가 작성되어야 정상으로 코드가 출력된다.
호출할시 이런 오류가 발생한다.
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
이말은. age 값이 *arg 값이랑 바뀌어 정상 출력되지 않는것,
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)
이렇게, age 값을 *arg의 위치를 바꿔주면 호출할시 오류가 발생하지 않는다.
=====================================================================
가변인수 키워드
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")
이 코드도 마찬가지로 가변인수가 위치하고 마지막으로 address가 위치해 있기 때문에
오류가 발생한다.
위 코드를 호출할시 이런 오류가 발생한다.
SyntaxError: invalid syntax
이 역시 가변인수와 address의 위치를 변경해주면 오류가 발생하지 않는다. 이때 address는 default값을 가지므로 position인 name, age 보다 뒤에 써주어야 한다.
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")
===============================================================
위치인수, 가변인수, 가변키워드
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
라는 에러를 발생하게 된다.
position인 age를 맨앞으로 이동시켜주고 kwargs를 맨뒤로 옮겨준다.
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" ,mobile="01012341234", address="seoul")
name=아이유
args=('정우성', '01012341234', 'male')
age=20
kwargs={'mobile': '01012341234'}
address=seoul
라는 결과 값이 나오게 된다.