default value parameter와 non-default value parameter의 순서

강민성·2021년 12월 3일
0

파이썬에서 함수를 정의할때, 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를 할당되게 하려는 것인지 알 수 없기 때문이다.

따라서 함수 인자에 초기값을 설정할 때는 초기값을 설정한 인자를 인자 중 마지막에 두어야 하며, 함수를 호출할 때는 함수에 정의된 순서로 인자를 입력해야 한다.

profile
Back-end Junior Developer

0개의 댓글