Python 3에서 가변 인수 목록의 기본값을 설정할 수 있습니까? 같은Python의 변수 인수 목록의 기본값
뭔가 :
def do_it(*args=(2, 5, 21)):
pass
나는 변수 인수 목록 유형 tuple
입니다하지만 튜플이 여기에 허용되지 것이 궁금합니다.
Python 3에서 가변 인수 목록의 기본값을 설정할 수 있습니까? 같은Python의 변수 인수 목록의 기본값
뭔가 :
def do_it(*args=(2, 5, 21)):
pass
나는 변수 인수 목록 유형 tuple
입니다하지만 튜플이 여기에 허용되지 것이 궁금합니다.
하지 구문 경우에, 당신이 원하는 행동에 따라 :
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, 2]
[1, 2, 3]
def f(a, L=[]):
L.append(a)
return L
print f(1)
print f(2)
rint f(3)
에 전달 된 인수를 축적 : http://www.network-theory.co.uk/docs/pytut/DefaultArgumentValues.html
나는 일반적으로 뭔가가 확인 전달 된 다음 그렇지 않으면 함수 본문에서 초기화하십시오.
튜플 내부의 객체가 불변 인 경우 튜플 자체도 변경할 수 없으므로 OP의 예제는 안전합니다. –
당신이 옳습니다. 튜플이 아닌 가변 객체를 생각하고있었습니다. 수정 해줘서 고마워. –