** args和* kwargs错误

时间:2018-06-16 05:23:09

标签: python arguments

我正在学习* args和** kwargs并且有一个问题。当我们在列表上使用**而在字典上使用*时会发生什么?我知道它不起作用,但想知道它是否是一个语法问题,或者是否有某些事情有更直观的解释。

1 个答案:

答案 0 :(得分:2)

让我们找出:

>>> def f(arg):
...   print(arg)
... 
>>> f(**[])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f() argument after ** must be a mapping, not list
>>> f(*{})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f() missing 1 required positional argument: 'arg'
>>> f(*{'foo': 42})
foo

因此列表失败,因为类型完全错误,并且dict按预期传递键:

>>> list({'foo': 42})
['foo']