在Python中,通过**来展开一个dict的应用非常广泛,我们可以通过这个语法为函数传递不确定的各种key-value参数。比如
def foo(**kwargs):
print(kwargs)
# foo(a=1, b=2, c=3)
# foo(**{'a': 1, 'b': 2, 'c': 3})
这个我么需要说明一个细节,也就是在给上面的foo函数传递的参数中,key的类型只要是字符串就可以,并不一定需要使用合法的变量名。下面,使用上面的函数foo,我们可以在Python shell中做一些实验:
>>> f(**{'$': 1, '#': 2, '-': 3, '=': 4})
{'$': 1, '#': 2, '-': 3, '=': 4}
>>> f($=1)
File "<stdin>", line 1
f($=1)
^
SyntaxError: invalid syntax
可以看到各种带有特殊符号的字符串,都可以通过**传递到函数的参数中,但是在直接调用函数时就无法做到了。这就给很多地方的实现提供了很多便利。顺便提一下,在dict的key都是字符串的时候,new_dict = dict(x=1, y=2, **old_dict)这样的方式也可以很方便创建一个新的dict实例,很像javascript中通过...来展开并创建一个新的object的用法。