我正在尝试编写一个包含一些默认值的函数,可能会发送一些额外的参数。例如,我想要的是:
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
但它并没有真正回答这个问题(至少,根据我的理解)。甚至可以这样做吗?
感谢。
答案 0 :(得分:1)
在Python 3中,您可以使用keyword-only arguments。这看起来像这样:
def defaultsAndArbitrary(arr, *modifiers, example1=True, example2=13):
在Python 2中,您必须使用与您链接的问题中给出的解决方案类似的解决方案:您必须使用**kwargs
并从kwargs dict手动提取example1
和example2
,默认情况下,如果那些kwargs没有通过。这意味着您无法在函数签名中指定其名称或默认值;你必须在函数的代码中完成它。
请注意,在任何一种情况下,您的example1
和example2
变量必须通过关键字传递(如果您想为它们传递值而不是使用默认值);他们不能通过位置传递。
答案 1 :(得分:1)
您可以这样做:
def defaultsAndArbitrary(arr, *modifiers, **kwargs):
example1 = kwargs.get('example1',True)
example2 = kwargs.get('example2',13)