TypeError: multiple values for (named keyword) argument

TypeError: multiple values for (named keyword) argument

我试图将命名关键字参数与一些 kwargs 和 args 一起传递给 Python 3 中的函数,但是 运行 遇到一个奇怪的问题,即函数接收命名的多个值参数:

MWE:

args = ('arg1_str', 'arg2_str')

def a(positional, named=None, *args, **kwargs):
    print(positional, named, *args, **kwargs)

a("positional_str", named="named_str", *args, kwarg1="kwarg1_str")

预期输出:

positional_str named_str arg1_str arg2_str kwarg1="kwarg1_str"

实际输出:

TypeError: a() got multiple values for argument 'named'

named 被解释为 named 关键字参数和 *args 的一部分,因此是“多个值”。它需要在 *args 之后,以表明它 只能 作为关键字参数传递。

args = ('arg1_str', 'arg2_str')

def a(positional, *args, named=None, **kwargs):
    print(positional, named, *args, kwargs)

a("positional_str", named="named_str", *args, kwarg1="kwarg1_str")

打印:

positional_str named_str arg1_str arg2_str {'kwarg1': 'kwarg1_str'}

您需要将所有位置参数放在关键字前面

def a(positional, *args, named=None, **kwargs):
    print(positional, named, *args, **kwargs)

应该能让您得到想要的结果