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
已通过函数调用进行设置。啊!有道理。非常感谢。