【问题标题】:TypeError: got multiple values for argument when passing in *args [duplicate]TypeError:传入*args时获得多个参数值[重复]
【发布时间】:2020-04-30 08:48:40
【问题描述】:

每次我尝试为默认参数分配一个值时,同时使用 *args 时,都会引发错误:TypeError: "got multiple values for argument"。

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 但事实证明,该问题中的第一个参数被明确覆盖,所以在我自己的示例中,这与 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


    【解决方案1】:

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

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

    test(1,2,c=3, *args)
    # (1, 2, 3)
    

    【讨论】:

      【解决方案2】:

      你需要交换它,所以 c=3 是最后一个,因为 python 需要可选参数在最后。代码如下:

      def test(a,b, *args, c=3):
          pass
      
      args = [1,2,3]
      test(1,2, *args, c=3)
      

      【讨论】:

      • 谢谢伙计,这真的让我发疯了,非常感谢 :)
      • @JimJam 乐于助人
      • 嘿,事实证明这不是它的本意,它......很复杂......我希望我可以在这里发布我的答案,但问题已关闭,所以我会必须在这里输入。但基本上,如果您有 test(a,b *args, c=3),则意味着 arg 之后的所有内容都必须是 kwonly args,因此您无法同时拥有默认参数和仅默认参数。
      • 我知道这个问题与 kwonly args 无关,但事实证明这是按照您的方式进行操作的自然结果。你可以同时拥有默认参数和 kwonly 参数的唯一方法是执行 test(a,b, c=3, *args, d,e)。然而,在函数调用中你不能做像'c=[value']这样的事情,所以你只需要输入你想要的值。但是通过这样做,您可以拥有默认参数和 kwonly 参数。
      • 我没有关注你,你能举个例子说明你能做什么和不能做什么
      猜你喜欢
      • 2014-03-12
      • 2019-07-05
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 2021-12-18
      • 2016-11-09
      • 2020-02-10
      相关资源
      最近更新 更多