为何使用**解包字典传参时函数关键字必须为字符串类型?
为什么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
相关产品推荐
相关产品推荐

