|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
4. 请问下面代码会打印什么呢?
>>> def func(x, *y, **z):
... print(x, y, z)
...
>>> func(1, 2, 3, 4, y=5)
>>> # 请问这里会打印什么内容?
复制代码
答:
>>> func(1, 2, 3, 4, y=5)
1 (2, 3, 4) {'y': 5}
复制代码
# 以上是小甲鱼的例子,为什么没有先将y赋值为5呢,比如这样(5,)
#下面是我自己写的:
def func(x, **y):
print(x, y)
func(y = 1, x = 2, v = 3)
2 {'y': 1, 'v': 3} # 为什么在这里就先运行x = 2了呢
本帖最后由 isdkz 于 2023-2-14 01:38 编辑
这样也不行的,关键字参数优于收集参数,收集参数都是等位置参数和关键字参数都传完了才收集的,
这里因为你给 x 既传了位置参数又传了关键字参数所以就报错说 x 获得了多个值
即使是这样传也不行:
>>> func(2, **{"y":1, "x":2, "v":3})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: func() got multiple values for argument 'x'
>>>
所以就别想着让收集参数的名字跟非收集参数的名字冲突了,
收集参数只能捡剩下的没人要的
|
|