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

Python 如何使用默认参数和任意参数创建函数,python,function,arguments,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 exampl

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

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)
这里有一个类似的问题:

但它并没有真正回答这个问题(至少据我所知)。甚至有可能做到这一点吗

谢谢。

在Python 3中,您可以使用。看起来是这样的:

def defaultsAndArbitrary(arr, *modifiers, example1=True, example2=13):
def defaultsAndArbitrary(arr, *modifiers, **kwargs):
    example1 = kwargs.get('example1',True)
    example2 = kwargs.get('example2',13)
在Python2中,您必须使用链接到的问题中给出的解决方案:必须使用
**kwargs
并手动从kwargs dict中提取
example1
example2
,如果这些kwargs未通过,则提供默认值。这意味着您不能在函数签名中指定它们的名称或默认值;您必须在函数的代码中执行此操作


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

您可以执行以下操作:

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

好的,我使用的是Python 2.7,所以我想我无法使用第一种方法:/那么在第二种情况下,如何在不覆盖发送的参数的情况下声明默认值?@user2869231:您链接的问题已经显示了如何执行该操作(Muravei的答案也是如此)。我输入了这个,当我发送example1=False时,它正确地将其更改为False。为什么呢?对我来说,example1=kwargs.get('example1',True)是在读入参数后设置示例1的值,从而覆盖参数?
kwargs.get('example1',True)
与kwargs中的'example1'相同:example1=kwargs['example1'];否则:example1=True。计算此表达式时,
kwargs
已通过函数调用进行设置。啊!有道理。非常感谢。