You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中能否同时使用位置参数与**kwargs关键字参数?

Python位置参数与**关键字参数混合使用说明

Python原生支持在同一次函数调用中同时传入位置参数和**形式解包的关键字参数,你遇到的报错和参数类型混合无关,是传参写法错误导致的。

报错核心原因

你定义的函数签名为def test_args_2(x, **z):,其中:

  • x是唯一的位置形参
  • **z是可变关键字形参,只能接收key=value形式传入的额外关键字参数,会自动将这些参数打包为字典赋值给z

你写的调用代码test_args_2(4, d),是把字典d直接作为第二个位置参数传入了,但函数仅定义了1个位置形参,没有多余的位置参数位置接收d,因此触发TypeError: test_args_2() takes 1 positional argument but 2 were given报错。

正确调用写法

要将字典传给**z形参,必须在字典变量前加**做解包,告知解释器将字典内的键值对拆分为独立的关键字参数传入,修正后的代码如下:

def test_args_2(x, **z):
    print(x, z)

d = {'a':4, 'b':5}
# 字典传给**形参时必须加**前缀解包
test_args_2(4, **d)

运行后正常输出结果:4 {'a': 4, 'b': 5}

合法传参顺序说明

Python允许混合使用不同类型的参数,只要遵循从左到右的固定顺序即可,顺序优先级为:

  • 必选位置参数
  • 带默认值的位置参数
  • *args形式的可变位置参数
  • 普通关键字参数(可带默认值)
  • **kwargs形式的可变关键字参数

只要符合上述顺序,同一行代码中混合传入位置参数、普通关键字参数、*解包的可迭代对象、**解包的字典均为合法操作。


内容的提问来源于stack exchange,提问作者Saro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:15:30