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

为何使用**解包字典传参时函数关键字必须为字符串类型?

为什么Python中用**语法解包字典传递参数时,要求字典的关键字必须为字符串类型?

代码示例

def Fn(**kwargs):
     print("dict = ", kwargs)

# 正常运行的情况
d = {'a':5,'b':7}
Fn(**d)
# Output    dict =  {'a': 5, 'b': 7}

# 报错的情况
d = {1:5,('a','s'):7}
Fn(**d)
# TypeError: Fn() keywords must be strings

错误原因

核心在于**kwargs是用来接收函数的关键字参数的,而Python里的关键字参数名称本身就必须是合法的标识符——也就是符合变量命名规则的字符串。

当你用**d解包字典时,字典的键会被直接当作关键字参数的名字传递给函数。你可以想想,平时写函数调用时,根本不可能写出Fn(1=5)或者Fn(('a','s')=7)这种代码,这本身就是语法错误。

Python在处理**解包操作时,会校验字典的键是否能作为合法的参数名,只有字符串类型的键才能满足这个要求,所以非字符串的键就会触发TypeError报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 07:07:07