default value parameter & non-default value parameter

최창환·2022년 3월 3일
0
post-thumbnail

default value paremeter를 non-default value paremeter앞에 정의하면 안되는 이유


def love_you(my_name, your_name="아이유"): 
    print(f"{my_name} loves {your_name}") 

love_you("정우성")

함수에는 parameter에 default값을 정의해 줄 수 있다. default값을 정의해준 parmeter는 함수를 호출할 때 값을 넘기지 않아도 괜찮은데 값을 넘기지 않으면 미리 정의해준 default값이 넘겨진다.

def love_you(my_name = "정우성", your_name): 
    print(f"{my_name} loves {your_name}") 
	

문제는 이렇게 default value paremeter가 non-default value paremeter앞에 정의되면 syntax Error가 발생한다는 점이다. 왜 default value paremeter를 앞에 정의하면 에러가 발생하는 것일까?
한마디로 말하자면 parameter를 정의하는 순서 없이 무작위로 생성 시 함수는 어떤 parameter에 어떤 값을 받아야 될지 정할 수 없기 때문이다.

def love_you(my_name, your_name="아이유"): 
    print(f"{my_name} loves {your_name}") 

love_you("정우성","태연)

이런식으로 default value parameter가 정해져도 함수호출시 얼마든지 값을 변경할 수 있는데

def love_you(my_name = "정우성", your_name): 
    print(f"{my_name} loves {your_name}") 
loev_you("아이유")	

다시 이 코드를 보면 your_name parameter에 "아이유"값을 줄 의도였겠지만 앞서 "정우성"의 값을 가진 my_name parameter도 함수호출시 값을 변경할 수 있기때문에 my_name parmeter에 할당이 되어버리면 your_name parameter는 아무런 값도 할당받지 못해 syntax Error가 발생하는 것이다.
따라서 default value parameter는 항상 non-default value parameter보다 뒤에 위치해야 한다.

profile
포기하지 않는 개발자

0개의 댓글