2016-06-02 2 views
4

나는 *args을 받아들이는 함수를 가지고 있지만, 아무 것도 제공되지 않을 경우를 대비해 기본 튜플을 설정하고 싶습니다. (이는 def f(*args=(1, 3, 5))을 통해 가능하지 않으며 SyntaxError이 발생합니다.)이를 수행하는 가장 좋은 방법은 무엇입니까? 의도 된 기능은 다음과 같습니다. 어떻게 스타 인수에 대한 기본값을 설정할 수 있습니까?

f() 
# I received 1, 2, 3! 

f(1) 
# I received 1! 

f(9, 3, 72) 
# I received 9, 3, 72! 

기능 g 다음은 올바른 기능을 제공 할 것입니다,하지만 난 *args을 선호 할 것입니다.

def g(args=(1, 2, 3)): 
    return "I received {}!".format(', '.join(str(arg) for arg in args)) 

g() 
# I received 1, 2, 3! 

g((1,)) 
# I received 1! 

g((9, 3, 72)) 
# I received 9, 3, 72! 
+0

'f (1)'또는'f (1,2)'에 대해'args = (1,2,3)'을 원하십니까? – qvpham

+0

@julivico 인자가 주어지지 않으면 ('f()'), 디폴트는'args = (1, 2, 3)'이어야합니다. 인수가 주어지면, 그것들을 사용해야 만합니다. ('f (1)'은'args = (1,)'을 사용해야한다.) – 2Cubed

+2

'if not args : args = (1,2,3)'를 사용할 수있다. 키워드 매개 변수 – qvpham

답변

6

인수가 수신되지 않으면 args은 빈 튜플이됩니다. 메서드 시그니처 자체에 기본값을 추가 할 수는 없지만 args이 비어 있는지 확인하고 함수 내부의 대체 값으로 바꿀 수 있습니다.

def g(*args): 
    if not args: 
     args = (1, 2, 3) 
    return 'I received {}!'.format(', '.join(str(arg) for arg in args)) 
+2

처럼 그것을 설정하는 예쁜 해결책이 없습니다. 동시에 거의 동일한 3 가지 답변을 제출하는 것은 재미 있습니다. 이것은 파이썬 (Python)의 원칙 중 하나의 예일 수 있습니다. (https://www.python.org/dev/peps/pep-0020/) * " - 그것을 할 명백한 방법. "* –

11

당신은 args이 함수에 truthy 여부를 확인할 수 있습니다 : 더 args이 함수에 전달되지 않은 경우

def g(*args): 
    if not args: 
     args = (1, 2, 3) 
    return "I received {}!".format(', '.join(str(arg) for arg in args)) 

, 그것은 False로 평가되는 빈 튜플에 발생합니다.

4
def g(*args): 
    if not args: 
     args = [1, 3, 5] 
    return "I received {}!".format(', '.join(str(arg) for arg in args)) 
관련 문제