2017-04-07 5 views
3

그래서 나는과 같이 여러 가지 선택적 인수와 기능을 가지고 :여러 선택적 인수 파이썬

def func1(arg1, arg2, optarg1=None, optarg2=None, optarg3=None): 

Optarg1 & optarg2은 은 일반적으로 함께 사용하고이 2 개 개의 인수가 지정된 경우 다음 optarg3 사용하지 않을 수 있습니다. 반대로 optarg3이 지정되면 optarg1 & optarg2는 사용되지 않습니다.

if optarg1 != None: 
    do something 
else: 
    do something else 

내 질문은 선택 여러있을 때 사용하는 선택적 인수 기능을 "에게"하는 방법이다 : 그것은 하나 개의 선택적 인수 인 경우 함수가 사용되는 인수 "알고"하는 것이 쉬울 것 인수가 아닌 모든 인수가 항상 지정되어 있습니까? ** kwargs와 함께 논쟁을 파싱하는 것은 갈 길입니까?

+0

의 사용 가능한 복제 [선택 인수 기능?] (https://stackoverflow.com/questions/9539921/function-with-optional-arguments) –

답변

4

** kwargs로를 파이썬 기능은 키워드의 인수의 임의의 숫자를 취할 수 있도록하는 데 사용되며 그런 다음 ** 키워드 인수 사전을 압축 해제합니다. Learn More here

def print_keyword_args(**kwargs): 
    # kwargs is a dict of the keyword args passed to the function 
    print kwargs 
    if("optarg1" in kwargs and "optarg2" in kwargs): 
     print "Who needs optarg3!" 
     print kwargs['optarg1'], kwargs['optarg2'] 
    if("optarg3" in kwargs): 
     print "Who needs optarg1, optarg2!!" 
     print kwargs['optarg3'] 

print_keyword_args(optarg1="John", optarg2="Doe") 
# {'optarg1': 'John', 'optarg2': 'Doe'} 
# Who needs optarg3! 
# John Doe 
print_keyword_args(optarg3="Maxwell") 
# {'optarg3': 'Maxwell'} 
# Who needs optarg1, optarg2!! 
# Maxwell 
print_keyword_args(optarg1="John", optarg3="Duh!") 
# {'optarg1': 'John', 'optarg3': 'Duh!'} 
# Who needs optarg1, optarg2!! 
# Duh! 
+0

이이 일의 가장 파이썬 방법입니다. –

1

은 당신이 함수의 호출을 할당하면 당신은 당신이 전달하는 매개 변수-EMPT을 미리 할 수 ​​있습니다.

def foo(a, b=None, c=None): 
    print("{},{},{}".format(a,b,c)) 

>>> foo(4) 
4,None,None 
>>> foo(4,c=5) 
4,None,5