是否可以在参数列表的中间放置一个varargs参数,并且可选的参数最后?

时间:2014-11-15 23:06:17

标签: python syntax variadic-functions

这在语法上是可能的,但实际上可能吗?

def func(arg1, *args2, arg3 = None):
    ....

我们永远无法访问arg3,我是对的吗?如果是这样,为什么Python允许这个?

2 个答案:

答案 0 :(得分:0)

您声明的是具有至少一个位置参数和一个必需的仅限关键字参数的函数。如果要传递func('arg', 1, 2, 3, 'whatever', arg3=2)的值,可以将其称为arg3。例如,

>>> def func(arg1, *args2, arg3=None):
...   print('arg1', arg1)
...   print('args2', args2)
...   print('arg3', arg3)
...
>>> func(1, 2, 3, 4, 5, 6)
arg1 1
args2 (2, 3, 4, 5, 6)
arg3 None
>>> func(1, arg3=2)
arg1 1
args2 ()
arg3 2
>>>

答案 1 :(得分:0)

您可以使用arg3参数调用它。你只需要明确告诉它:

func('arg1', 'some' 'values', 'that', 'will be', 'treated', 'as *arg2', arg3 = 'new value')

通过这种方式,您将获得arg3 = 'new value'