2017-04-07 104 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