具有** kwargs的函数

时间:2015-01-19 22:05:23

标签: python function arguments

我想写一个Python函数myfun,只接受可选参数ab

如果在调用a时未指定bmyfun中的任何一个,我如何告诉myfun使用a的某些默认值b

def myfun(**kwargs):

    a = kwargs.get('a', None)
    # if a is not specified, use default a=4.4

    b = kwargs.get('b', None)
    # if b is not specified, use default b=2.1    

    c = 2*a
    d = 3.1*b

    return c, d


c,d = myfun(a=1,b=2)
print c,d

2 个答案:

答案 0 :(得分:4)

**kwargs用于收集任意数量的关键字参数。如果您只想接受两个,那么它不适合使用。

相反,您应该为ab参数指定默认值:

def myfun(a=4.4, b=2.1):

演示:

>>> def myfun(a=4.4, b=2.1):
...     print('a={}\nb={}'.format(a, b))
...
>>> myfun()
a=4.4
b=2.1
>>> myfun(a=1)
a=1
b=2.1
>>> myfun(a=1, b=2)
a=1
b=2
>>> myfun(b=2)
a=4.4
b=2
>>>

答案 1 :(得分:0)

将它们设置为默认值:

def myfun(a=4.4,b=2.1):

如果您未在函数定义中将关键字添加为关键字,则用户无法知道他们可以设置ab

如果您使用kwargs.get设置值,则会将默认值传递给:

a = kwargs.get('a', 4.4) # a = 4.4 if a not in kwargs

b = kwargs.get('b', 2.1)