有人能解释一下使用单个或双个星号来解包字典的区别吗?如果在函数参数中使用时有所不同,您可以提到它们的差异,但我认为这并不相关。
然而,它们共享相同的星号语法,因此可能存在某些相关性。
def foo(a,b)
return a+b
tmp = {1:2,3:4}
foo(*tmp) #you get 4
foo(**tmp) #typeError: keyword should be string. Why it bothers to check the type of keyword?
此外,在这种情况下,为什么字典的键不允许作为函数参数时非字符串?是否有任何例外?他们为什么设计 Python 是这样的,是因为编译器无法在这里推断类型或其他原因吗?
foo(1=2, 3=4)
,这没有任何意义。关键字参数必须是有效的标识符。 - alkasmdict
(许多实现内部恰好如此),因此拒绝非字符串可以确保字符串可以通过最快的代码路径(加速所有Python代码)。 - ShadowRanger