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

问题描述 投票:4回答:1
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'
python unpack argument-unpacking
1个回答
0
投票

使用*(23,),您将按照已定义的位置参数将元组(23,)中的值解压缩为位置参数,即3a7b,因此[将C0]分配给参数23,这就是c起作用的原因,但是在fun(3, 7, d=10, *(23,))中,您还将fun(3, 7, c=10, *(23,))的值10分配为关键字参数,因此,与[[ C0]不能同时分配cc

© www.soinside.com 2019 - 2024. All rights reserved.