가변 매개변수
함수 선언 시 가변 매개변수를 사용하면 입력 값이 몇 개가 들어올지 모른다.
임의 개수의 인자를 받는 것이다.
기본적으로 자주 사용하는 print() 함수에서 가변 매개변수를 사용한다.
함수 호출 시 전달된 복수 개의 매개변수는 하나의 tuple 형태로 묶여서 다루어진다.
가변 매개변수 사용 시 어떤 이름이라도 상관없지만 관례적으로는 args를 많이 사용한다.
가변 매개변수 사용 시 매개변수를 아무것도 넣지 않아도 에러가 발생하지 않는다.
가변 매개변수와 비가변 매개변수는 혼합하여 사용할 수 있지만,
가변 매개변수가 비가면 매개변수보다 뒤에 위치하게 하여 함수를 작성하는 게 좋다.
가변 매개변수 *args를 비 가변 매개변수 operation 앞에 넣어 함수를 선언하였다.
함수가 생성되긴 하지만 실행 시 TypeError가 발생한다.
함수 실행 시 10, 20, 30을 args에 넣고, 'sum'을 operation에 넣으려고 하였지만
10, 20, 30, 'sum' 값 모두가 args에 들어간다.
operation 매개변수에는 아무런 인수가 들어가지 않은 것으로 간주되어 오류가 발생하는 것이다.
어떤 매개변수에 넣을지 직접 매개변수 이름을 사용해주면 오류가 발생하지 않는다.
이는 좀 번거로울 수 있다.
가변 매개변수는 한 함수에서 여러 개 사용할 수 없다.
가변 매개변수를 여러 개 사용하려할 시 SyntaxError가 발생하여 함수 생성 자체가 불가능하다.
키워드 가변 매개변수
키워드 가변 매개변수 사용 시 관례적으로 매개변수 이름으로 쓰이는 kwargs의 의미는 keyword argument의 약자이다.
보통 함수 호출 시 함수의 인수로 key = value 형태로 주어지는데,
키워드 가변 매개변수 사용 시 dict 형태로 packing 하여 인수를 받아온다.
키워드 가변 매개변수를 사용할 때도 가변 매개변수를 사용할 때와 마찬가지로 인자에 아무 값도 넣지 않아도 된다.
키워드를 사용하지 않고 그냥 매개변수 값만 넣으면 TypeError가 발생한다.
가변 매개변수를 한 함수에서 여러 개 사용할 수 없다고 했는데
가변 매개변수와 키워드 가변 매개변수는 혼용해서 사용 가능하다.
func 함수 사용 시, 가변 매개변수 *args 인수를 먼저 넣어준 뒤 키워드 매개변수 **kwargs 인수를 넣어주었다.
함수 호출 시 keyword argument 다음에 positional argument를 명시할 수 없다.
age = 4 까지는 올바르게 매개변수로 들어가지만, 5부터 오류가 발생한다.
함수 정의 시 keyword 형태의 인자 뒤에 keyword가 아닌 인자 값을 넣으려 하면 SyntaxError가 발생한다.