通过**传递过来的是字典序列,比如
x={1:'a',2:'b',3:'c'}
print(x)
结果是:{1:'a',2:'b',3:'c'},没有出错
x={‘1’:'a',‘2’:'b',‘3’:'c'}
print(x)
结果是:{‘1’:'a',‘2’:'b',‘3’:'c'} 也没有提示出错
但当以上情况作为**参数传递时就会有区别,虽然上面两种字典序列都是合法的
比如如下:
def f(**d):
print(d)
当使用第一种情况时,即这个字典序列 x={1:'a',2:'b',3:'c'}
f(**x)
结果
TypeError: f() keywords must be strings
当使用第二种情况时,即这个字典序列 x={‘1’:'a',‘2’:'b',‘3’:'c'}
f(**x)
结果是
{‘1’:'a',‘2’:'b',‘3’:'c'}
正常执行
总结:当把字典序列做为参数传递给两个星号参数时(**d),字典序列中的键,即key必须是字符型,当传给不带星号的函数参数时,不存在此情况,两种形式都能正常运行。