如何在python中将可变长度参数与关键字参数结合起来?

Tar*_*nti 1 python function keyword-argument python-3.x

def addv(a,b,*args):
    sum = a + b
    for x in args:
        sum += x
    return sum

addv(b = 1,a = 2) # This is valid
addv(args = (1,2,3,4,5,6,7,8),b = 9, a = 10) #This is giving me unexpected keyword argument.
Run Code Online (Sandbox Code Playgroud)

我了解到关键字参数本质上是作为元组传递的。所以,为了结合关键字和变量参数,我做了上面的实验。

有没有办法做这样的事情,或者在调用函数时所有变量参数都必须传递到最后。

Oma*_*nea 5

您应该使用**运算符来捕获关键字参数。像这样:

def addv(*args, **kwargs):
    result = 0
    for x in args:
        result += x
    for x in kwargs.values():
        result += x
    return result
Run Code Online (Sandbox Code Playgroud)

或者更短的方法(由 Delirious Lettuce 建议):

def addv(*args, **kwargs):
    return sum(args) + sum(kwargs.values())
Run Code Online (Sandbox Code Playgroud)

现在你可以这样做:

addv(b = 1, a = 2) # Outputs: 3
addv(1, 2, 3, 4, 5, 6, 7, 8, b = 9, a = 10) # Outputs: 55
Run Code Online (Sandbox Code Playgroud)

  • 没问题!我的意思是,如果你正确使用 `sum`,你可以像这样简化它。`返回总和(参数)+总和(kwargs.values())` (2认同)