Python - 함수 정의 할 때 default value parameter를 non-default value parameter 앞에 정의 하면 안되는 이유

GyungHo Go·2020년 4월 21일
0

우선 함수를 정의하는 방법에 대해 알아보자.

Positional Arguments

가장 기본적인 함수의 형태는

def world(first, second):
	print(f"{first} and {second}")

여기서 값은

world("USA", "Korea")

위 코드 처럼 순서대로 값이 parameter로 함수에 전해지는 경우다.

Keyword Arguments

위의 경우처럼 순서 대신 parameter 이름으로 값을 전해 줄수 있다.
이 방식으로 값을 주면 실제 parameter 순서가 바뀌어도 괜찮다.

def world(first, second):
	print(f"{first} hate {second}")

함수 값은

world(first="USA", second="Korea")

Mixing positional arguments

positional arguments와 keyword arguments를 혼용한 방식이다.

def world(first, second):
	print(f"{first} hate {second}")

함수 값은

world(first, second="Korea")

여기서 중요한 것은 keyword arguments는 순서가 바뀌어도 상관이 없지만 positional arguments부분은 순서를 지켜줘야 한다는 것이다. positional의 순서가 바뀌게 되면 에러가 뜰것이다.

yntaxError: positional argument follows keyword argument
이러한 에러가 뜨게 되는데
위와 같은 상황에서

world(second="Korea", first)

이렇게 바뀌게 되면 에러가 뜨는 것이다.
그 이유는, keyword arguments가 positional arguments보다 먼저 호출 되었기 때문이다. positional arguments는 반드시 순서를 지켜 주어야한다.

Parameter Default Value

함수의 parameter에 디폴트 값을 정해줘도 된다. default가 정의된 parameter 함수는 값을 넘겨받지 않아도된다.

def world(first, second="Korea"):
	print(f"{first} hate {second}")
함수는 
world("USA")

여기서 조심해야 될 점은 default값이 정의된 parameter가 default 값이 정의되지 않는 함수보다 먼저 위치하면 안된다.

def world(first="USA", second):
	print(f"{first} hate {second}")

만일 default value parameter를 non-default value parameter 앞에 선언하면 syntax error가 난다.
<SyntaxError: non-default argument follows default argument>

non-default argument 가 default argument 따라온다는 말이다.

설명하자면

def world(first="USA", second):
	print(f"{first} hate {second}")

여기서 함수를

world("Korea")

이와 같이 하게되면 문제가 발생한다.
기본적으로 함수는 positional arguments를 따르게 되는데, world의 인자가 first로 이동해야 하지만, first에는 이미 인자가 지정되있는 것이다.
또한 positional arguments에 따라 순서를 제대로 해주고, non-default valut parameter가 하나 더 있다고 가정 한다면 하나의 자리가 비어버리게 되는 것이다.

parameter 인자 중 default argument가 먼저 위치 하게된다면 인자가 지정될 자리가 모호해 지는 것이다.
이러한 문제를 방지하기 위해서 non-default를 먼저 써주어야 한다.

Arugument의 우선순위

함수에서 사용하는 argument들은 우선순위가 정해져 있다.
1. positional argument
2. default argument
3. positional arguments들의 집합
4. keyword arguments
5. keyword default arguments
6. keyword arguments의 집합

profile
기록하는 습관

0개의 댓글