如何使用默认和任意参数创建函数

时间:2014-08-06 21:00:32

标签: python function arguments

我正在尝试编写一个包含一些默认值的函数,可能会发送一些额外的参数。例如,我想要的是:

def defaultsAndArbitrary(arr, example1=True, example2=13, *modifiers):
    #code

然后,我希望能够像这样调用函数:

defaultsAndArbitrary([1,5,3,9], modifier1, modifier2)

通过该调用,参数的值应为:

arr = [1,5,3,9]
example1 = True
example2 = 13
modifiers = (modifier1, modifier2)

这里有一个类似的问题:

Having arbitrary number of arguments with a named default in python

但它并没有真正回答这个问题(至少,根据我的理解)。甚至可以这样做吗?

感谢。

2 个答案:

答案 0 :(得分:1)

在Python 3中,您可以使用keyword-only arguments。这看起来像这样:

def defaultsAndArbitrary(arr, *modifiers, example1=True, example2=13):

在Python 2中,您必须使用与您链接的问题中给出的解决方案类似的解决方案:您必须使用**kwargs并从kwargs dict手动提取example1example2,默认情况下,如果那些kwargs没有通过。这意味着您无法在函数签名中指定其名称或默认值;你必须在函数的代码中完成它。

请注意,在任何一种情况下,您的example1example2变量必须通过关键字传递(如果您想为它们传递值而不是使用默认值);他们不能通过位置传递。

答案 1 :(得分:1)

您可以这样做:

def defaultsAndArbitrary(arr, *modifiers, **kwargs):
    example1 = kwargs.get('example1',True)
    example2 = kwargs.get('example2',13)