파이썬에서 함수를 정의할때, default value parameter를 non-default value parameter 앞에 정의하면 에러가 발생한다.
SyntaxError: non-default argument follows default argument
이렇듯 파이썬에서 함수를 정의할 때는 non-default value parameter를 먼저 쓰고, default value parameter을 가장 뒤에 써야 한다.
그 이유는 무엇일까?
경우를 나누어 생각해보면 왜 이 순서가 정해져있는지 추측해볼 수 있다.
다음과 같은 함수가 있다고 하자.
def f(x, y, z):
print([x, y, z])
#[1, 2, 3] 을 출력하려 함
만약 함수의 초기값 하나를 미리 설정하고 싶은 경우 다음과 같이 쓸 수 있다.
def f(x, y, z=3):
print([x, y, z])
#[1, 2, 3] 을 출력하려 함
f(1, 2)
초기값을 설정한 인자가 인자 중 마지막 인자이기 때문에, 마지막 인자를 넣지 않고 함수를 실행해도 원하는 결과가 나온다.
하지만 만약 다음과 같이 설정하면 어떻게 될까?
def f(x=3, y, z):
print([x, y, z])
#[1, 2, 3] 을 출력하려 함
f(1, 2)
python 프로그램에 default value parameter를 non-default value parameter 앞에 정의하면 에러가 발생해서 실행되지 않기 때문에, 결과를 콘솔에서 볼 수는 없다.
1, 2에 x와 y를 할당되게 하려는 것인지, y와 z를 할당되게 하려는 것인지 알 수 없기 때문이다.
따라서 함수 인자에 초기값을 설정할 때는 초기값을 설정한 인자를 인자 중 마지막에 두어야 하며, 함수를 호출할 때는 함수에 정의된 순서로 인자를 입력해야 한다.