[Python] default argument는 왜 non-default argument 앞에 오지 못할까 ?

본 포스팅에선 함수를 정의할 때 default value parameter를 non-default value parameter 앞에 정의하면 안되는 이유에 대해 알아본다.

🐵 default arguments는 왜 non-default arguments 앞에 오지 못할까 ?

함수를 정의할 때 default value parameter를 non-default value parameter 앞에 정의할 수 없다.

이유는 간단히 말하면 default와 non-default를 순서에 맞지않게 섞을 경우에, 인터프리터가 어떤 값이 어떤 argument를 가르키는지 찾지 못하기 때문이다.


다음 예시와 함께 보자.

def fun1(a="Tom", b="True", x, y):
    print a,b,x,y

func1("A", "B", 1)  

parameter를 정의할때 defaut(a, b) 값을 non-default value(x, y) 앞에 두었다. 원래는 에러가 나지만 설명을 위해 호출이 가능하다고 가정해보자.


이때 함수 호출 시 default argument는 값을넣어도, 넣지않아도 된다.


따라서 "A", "B", 1 은 각각
1) a, b, x
2) a, x, y
3) a, b, x
4) b, x, y 의 값이 될 수 있다.


이렇게 경우의 수가 여러 개 나오기 때문에, 인터프리터가 입력된 인자값과 parameter를 매치시키지 못하게 된다.

func1("A") 와 같이 인자값을 하나만 넣었을 경우도 넷 중 어떤 parameter에 매치되는지 알 수 가 없다.


이러한 이유로 다음과 같이 default value는 non-default value 뒤에 정의해야만 어떤 값이 어떤 parameter의 값인지 인터프리터가 알 수 있다.

def fun1(x, y, a="Tom", b="True"):
    print(a,b,x,y)

func1("A", "B", 1) 

위 예시에선 "A", "B", 1 은 각각 순서대로 x, y, a 의 값을 가리키게 된다.


** 인터프리터(interpreter): 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다.

좋은 웹페이지 즐겨찾기