多个可选参数python

Multiple optional arguments python

所以我有一个函数,有几个可选参数,比如:

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

optarg1和optarg2通常一起使用,如果指定了这两个参数,则不使用optarg3。相反,如果指定了optarg3,则不使用optarg1&optarg2。如果它是一个可选参数,那么函数很容易"知道"要使用哪个参数:

1
2
3
4
if optarg1 != None:
    do something
else:
    do something else

我的问题是如何"告诉"函数,当有多个可选参数并且并非总是指定所有参数时,要使用哪个可选参数?用**Kwargs分析参数是不是可行?


**kwargs用于让python函数接受任意数量的关键字参数,然后**解包关键字参数字典。在此处了解更多信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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!


如果您在函数的调用中分配它们,那么您可以预先清空正在传入的参数。

1
2
3
4
5
6
7
def foo( a, b=None, c=None):
    print("{},{},{}".format(a,b,c))

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