8
def fun(a, b, c, d):
    print('a:', a, 'b:', b, 'c:', c, 'd:', d)

为什么这个有效

fun(3, 7, d=10, *(23,))

并打印出:

a: 3 b: 7 c: 23 d: 10

而这

fun(3, 7, c=10, *(23,))

才不是

Traceback (most recent call last):
  File "/home/lookash/PycharmProjects/PythonLearning/learning.py", line 10, in <module>
    fun(3, 7, c=10, *(23,))
TypeError: fun() got multiple values for argument 'c'
4

1 回答 1

6

使用*(23,),您将元组中的值解包(23,)为位置参数,遵循已定义的位置参数,即3fora7for b,因此23将分配给 parameter c,这就是为什么fun(3, 7, d=10, *(23,))有效,但在fun(3, 7, c=10, *(23,))您也分配给10cas关键字参数,因此它被认为是冲突,因为c不能同时分配2310

请注意,虽然合法,但有些人不鼓励在关键字参数之后解包可迭代参数,正如这里所讨论的,尽管语法最终被裁定保留。

于 2019-11-20T19:19:44.703 回答