파이썬 함수의 기본값 인자(default parameter)란 함수를 호출할 때 인자의 값을 설정하지 않아도 기본값이 할당되도록 하는 기능이다. 기본값은 함수를 정의할 때 지정해준다. 예를 들어 보자.
def funcA(a=10):print('a='+str(a)) |
이 함수는 다음과 같이 두 가지 방법으로 호출할 수 있다.
>>> funcA() # a에 기본값인 10이 자동으로 저장된다.
|
이 예에서 인자 a는 기본값 인자이고 호출하는 쪽에서 값을 주지 않으면 기본적으로 10 값을 갖게 된다. 그래서 funcA()와 같이 값을 주지 않으면 10이 출력되고 funcA(20)과 같이 값을 주면 그 값이 인자 a 로 전달되는 것이다.
다른 예를 들어 보자.
def printName(firstName, secondName='Kim'):print('My name is '+ firstName +' ' + secondName +'.') |
이 함수도 다음과 같이 두 가지 방법으로 호출 가능하다.
>>> printName('Jang-Hyun')My name is Jang-Hyun Kim.>>> printName('Jang-Hyun', 'Park')My name is Jang-Hyun Park. |
기본값 인자는 값을 생략해서 호출할 수 있지만 일반 인자는 반드시 값을 지정해 주어야 한다. 따라서 printName()함수를 호출할 때 첫 문자열은 반드시 정해서 넘겨주어야 한다. 여기에서 printName()함수의 두 번째 인자를 입력하지 않으면 기본적으로 ‘Kim’으로 지정된다. 두 번째 인자를 명시적으로 지정하면 그것이 secondName 으로 지정된다.
한 가지 주의할 점은 일반 인자와 기본값 인자가 같이 올 때에는 반드시 기본값 인자는 뒤에 와야 한다는 점이다. 즉, 아래와 같이 정의하면 오류가 발생한다.
>>> def printName(firstName='Kim', secondName): |
기본값 인자가 두 개 이상일 때에서도 항상 일반 인자 뒤에 와야 한다.
>>> def add(a, b=0, c=0):... return a+b+c...>>> add(1)1>>> add(1,2) # b에 2가 들어간다.3>>> add(1,2,3) # b에 2, c에 3이 들어간다.)6 |
이 예에서 보듯이 함수를 호출할 때 주는 순서 대로 기본값 인자에 값이 할당 됨을 알 수 있다.
또 한 가지 주의할 점은 기본 인자는 최초의 호출 시에만 지정된 값으로 초기화 되고 이후의 호출에서는 그렇지 않다는 점이다. 따라서 리스트나 딕셔너리와 같은 가변(muatble) 객체를 기본 인자로 사용할 때 문제가 된다.
>>> def f(a, L=[]):... L.append(a)... return L...>>> f(1)[1]>>> f(2)[1, 2]>>> f(3)[1, 2, 3] |
이 예제를 보면 기본 인자 L은 최초의 호출에서만 빈 리스트로 초기화 되고 그 이후의 호출에서는 그 내용물은 유지된다. 따라서 리스트의 요소가 축적되는 것이다. (마치 C/C++에서의 static 변수와 비슷한 동작을 수행한다.)
후속 호출에도 mutalbe 객체를 초기화하려면 다음과 같은 방법으로 코딩하면 된다.
def f(a, L=None):
|
이 경우 실행 결과는 다음과 같다.
>>> f(1)[1]>>> f(2)[2]>>> f(3)[3] |
댓글 없음:
댓글 쓰기