python - 函数参数解包错误

标签 python argument-unpacking

看这个例子(使用 python 2.7.6):

>>> def func(a, b, c, d):  
    print a, b, c, d

>>> func(1, c = 3, *(2,), **{'d':4})
1 2 3 4

到目前为止,一切都很好。但是,为什么下面的调用失败了?

>>> func(1, b = 3, *(2,), **{'d':4})

Traceback (most recent call last):
  File "<pyshell#69>", line 1, in <module>
    func(1, b = 3, *(2,), **{'d':4})
TypeError: func() got multiple values for keyword argument 'b'

最佳答案

用另一个函数签名可以更好地理解

>>> def func(*args, **kw):
        print(args, kw)


>>> func(1, b = 3, *(2,), **{'d':4})
(1, 2) {'b': 3, 'd': 4}

因此,位置参数和关键字参数都放在一起。

使用原始签名,意味着23都将被分配给b,这是无效的。

PS:由于简单的元组解包不提供名称,因此这些值将被视为位置参数。

关于python - 函数参数解包错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20148697/

相关文章:

python - 检索国际投资基金数据

python - 带星号参数和不带星号参数的差异调用函数

python - **(双星/星号)和*(星号/星号)对参数有什么作用?

python - 处理要在没有全局变量的情况下跨函数使用的变量

Python Dataframe 在一行中将多列求和/减去多列

python - 在 Python3 中解密后无法从加密文件中恢复原始图像文件

c++ - 将元组解压为成员初始化或父类(super class)构造函数

python - 如何创建一个接受字典输入的函数?

python - 如何忽略元组的解压缩部分作为 lambda 的参数?

python - 选择名称与带有通配符的 str 匹配的列进行 t 检验 (Python)