2017-04-07 44 views
3

所以,我有幾個可選參數的函數,象這樣:通常一起使用,如果指定了這2個ARGS然後optarg3不使用多個可選參數蟒蛇

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

Optarg1 & optarg2是。相反,如果指定了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用來讓Python函數採取關鍵字參數任意數量和然後**解包關鍵字參數的字典。 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

這是這樣做的最Python的方式。 –

1

如果在函數的調用分配他們,你可以搶先你逝去其中的參數。

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

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