TypeError:传入* args [duplicate]

问题描述 投票:2回答:2

[每次我尝试为默认参数分配一个值时,当也使用* args时,都会引发错误:TypeError:“为参数获取多个值”。

def test(a,b, c=3, *args):
    pass

args = [1,2,3]
test(1,2,c=3, *args)

TypeError: test() got multiple values for argument 'c'

起初我以为我在这里找到了答案:TypeError: got multiple values for argument但是事实证明,该qusetion中的第一个参数已被显式覆盖,因此在我自己的示例中,这与说test(1,2,a = 3,* args)相同,其中a的值为1和3.但是,实际情况并非如此。

此问题可能是此"got multiple values for keyword argument" when using *args, **kwargs in a python function的一个可能重复,但老实说,该问题还有很多细节,超出了我所要求的范围,我真的无法完全解决。因此,如果这是重复项,那么它会将所有内容从另一个问题中抽象出来,直到实际的问题本身。

python parameters arguments parameter-passing
2个回答
4
投票

您需要交换它,因此c=3位于最后,因为python要求在末尾添加可选参数。完成后,代码将按以下方式运行:

def test(a,b, *args, c=3):
    pass

args = [1,2,3]
test(1,2, *args, c=3)

2
投票

您正在指定关键字参数,并且之后位置参数列表,这就是您收到错误的原因。首先指定所有位置参数,然后指定关键字参数:

def test(a,b, *args, c=3):
    print(args)

test(1,2,c=3, *args)
# (1, 2, 3)
© www.soinside.com 2019 - 2024. All rights reserved.