Python-方法参数中的值拆包顺序

Łuk*_*asz 8 python unpack argument-unpacking

def fun(a, b, c, d):
    print('a:', a, 'b:', b, 'c:', c, 'd:', d)
Run Code Online (Sandbox Code Playgroud)

为什么这个有效

fun(3, 7, d=10, *(23,))
Run Code Online (Sandbox Code Playgroud)

并打印出:

a: 3 b: 7 c: 23 d: 10
Run Code Online (Sandbox Code Playgroud)

而这

fun(3, 7, c=10, *(23,))
Run Code Online (Sandbox Code Playgroud)

才不是

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'
Run Code Online (Sandbox Code Playgroud)

blh*_*ing 6

使用*(23,),您将(23,)按照已定义的位置参数(即3for a7for b23将元组中的值作为位置参数解压缩,这将被分配给parameter c,这就是为什么fun(3, 7, d=10, *(23,))有效,但是在其中,fun(3, 7, c=10, *(23,))您还将value分配10cas关键字参数,因此被视为冲突,因为c无法同时使用23和分配10

请注意,虽然合法,但被一些人以关键字参数后解压迭代参数气馁,因为讨论这里,虽然语法最终裁定的住宿。