[python] 함수 parameter의 기본값 설정에 대해

Jay·2020년 2월 5일
2

python에서 함수를 선언하는 법

def 함수명(인자1, 인자2):
  함수 내용
  return 아웃풋 할 내용

예를 들어 두개의 인자를 받아 평균값을 구하는 내용의 함수를 만들고 싶다면

def average1(num1, num2):
  result = (num1 + num2)/2
  return result
average1(5,7)
>>> 6.0

parameter default value

기본 매개변수라는 뜻으로 함수를 선언할 때 부터 인자값을 설정한다.

def average2(num1=5, num2=7):
  result = (num1 + num2)/2
  return result
average2();
>>> 6.0

기본매개변수를 설정하더라도 함수를 호출할 때 변경할 수 있다.

average2(7);
>>> 7.0
average2(0,10);
>>> 5.0

인자값의 일부에만 parameter default value를 설정할 수도 있다.

def average3(num1, num2, num3=9):
  result = (num1 + num2 + num3)/3
  return result
average3(2,7);
>>>6.0

average3(2,7,6);
>>>5.0

기본 매개변수를 사용할 때 한가지 지켜야 할 점은, 기본 매개변수를 non-default value parameter의 앞에 배치해야 한다는 점이다.

def average4(num1=5, num2, num3):
  result = (num1 + num2 + num3)/3
  return result;
SyntaxError: non-default argument follows default argument

이렇게 순서를 바꾸면 문법오류가 발생하는데 이 부분에 대해 두 가지 이유를 생각해 봤다.
1. 기본매개변수가 주어지더라도 추후에 함수를 선언할 때 따로 설정할 수도 있지만, 디폴트값을 사용할 수도 있는데, 이렇게 값의 존재 유무가 불확실하면 다른 인자의 위치가 바뀌어 혼란이 올 수 있기 때문인 것 같다. 만약 마지막 예제에서 num1값을 설정해서 함수를 호출하면 세 인자가 전부 각자의 자리를 찾아가지만, num1을 제외하고 호출하면 나머지 인자의 자리가 한 자리씩 앞으로 당겨져 average4(5,6) 이런 식으로 호출할 수밖에 없다.
2. 파이썬에는 함수의 매개변수 형식의 순서가 있어서 그 순서를 따라야 하기 때문이다.하단에 명시된 순서를 지키지 않으면 역시 syntax error가 발생한다.

non default value
default value (num1 = 3)
variable length positional arguments ( *args)

keyword only arguments
non default keyword only arguments
keyword only arguments with defaults

variable length keyword arguments (**kwargs)

참고: getKT

profile
You're not a computer, you're a tiny stone in a beautiful mosaic

1개의 댓글

comment-user-thumbnail
2021년 11월 8일

잘 읽었습니다 ㅎㅎ

답글 달기