본문 바로가기
Programming/Python

[Python] Default 인수 (기본값 설정)

by 느리게 걷는 즐거움 2022. 12. 10.
반응형

디폴트 인수

파이썬 함수에 인수를 전달하지 않는 경우 정해진 기본값을 사용하도록 하는 것이 디폴트 인수 이다. 아래 함수에 사용되는 name과 pages인수는 인수에 값이 전달되지 않는 경우 각각 디폴트값을 갖는다.

아래의 default_test_function()함수를 호출 시 값을 전달하지 않았기 때문에 디폴트값인 "no name"과 1값을 출력한다.

## 디폴트 인수
def default_test_function(name="no name" , pages=1):
  info = (f"book {name} is {pages} pages")
  return info

print(default_test_function())

디폴트 인수 사용 시 주의점

리스트와 같은 참조형 변수는 디폴트 인수로 사용하지 않는 것이 좋다. 아래의 default_test_list()함수는 l이라는 리스트 인수가 전달되지 않으면 10의 값을 갖는 리스트를 생성한다. 그리고 생성된 리스트에 전달된 x값을 추가한다.

'r'로 전달받은 처음 결과는 의도한 것처럼 [10] 리스트를 먼저 생성한 후 x로 전달된 20을 추가하여 [10, 20]의 리스트가 생성된다. 다음 'l'로 전달받은 default_test_list()함수는 [10, 100]을 예상 하지만 결과는 이전에 생성된 리스트에 100을 추가한 [10, 20, 100]이 전달된다.

'l'을 통해 호출되는 default_test_list()가 리스트를 생성한 후 다시 함수가 호출되는 경우 기존에 생성한 리스트의 주소를 참조하기 때문에 새로운 리스트가 생성되지 않아 의도하지 않은 결과가 발생할 수 있습니다.

def default_test_list(x , l=[10]):
  l.append(x)
  return l

r= default_test_list(20)
print(r)

l= default_test_list(100)
print(l)

print(r is l)

------------
[10, 20]
[10, 20, 100]
True

 

 

반응형