2010-05-03 5 views
3

Python 3에서 가변 인수 목록의 기본값을 설정할 수 있습니까? 같은Python의 변수 인수 목록의 기본값

뭔가 :

def do_it(*args=(2, 5, 21)): 
    pass 

나는 변수 인수 목록 유형 tuple입니다하지만 튜플이 여기에 허용되지 것이 궁금합니다.

답변

4

하지 구문 경우에, 당신이 원하는 행동에 따라 :

def do_it(*args): 
    if not args: args = (2, 5, 21) 

또는

def do_it(a=2, b=5, c=21, *args): 
    args = (a,b,c)+args 

가 수행해야합니다.

1

그런 목록을 보통 초기화하는 것은 좋은 생각이 아닙니다.

기본값은 한 번만 계산됩니다. 이것은 디폴트가 목록, 사전 또는 대부분의 클래스의 인스턴스와 같은 변경 가능한 객체 일 때 차이를 만듭니다. 예를 들어, 다음과 같은 기능이에서

[1] 
[1, 2] 
[1, 2, 3] 

나는 일반적으로 뭔가가 확인 전달 된 다음 그렇지 않으면 함수 본문에서 초기화하십시오.

+2

튜플 내부의 객체가 불변 인 경우 튜플 자체도 변경할 수 없으므로 OP의 예제는 안전합니다. –

+0

당신이 옳습니다. 튜플이 아닌 가변 객체를 생각하고있었습니다. 수정 해줘서 고마워. –

관련 문제