关于python:在string.format(**d)中,**d是什么意思?

What does **D mean in string.format(**D)?

本问题已经有最佳答案,请猛点这里访问。

我正在阅读编程python,无法理解下面代码中的**d是什么意思:

1
2
3
4
5
>>> D = {'say': 5, 'get': 'shrubbery'}
>>> '%(say)s => %(get)s' % D
'5 => shrubbery'
>>> '{say} => {get}'.format(**D)
'5 => shrubbery'

我在python上搜索了**kwargs,大多数结果都是为了让函数接受任意数量的关键字参数。

这里的string.format(*d)看起来不像是让函数接受任意数量的关键字参数的东西,因为我看到字典类型的变量d只是一个参数。但这是什么意思?


你要找的似乎是开箱辩论。


**d用于解包参数。它将字典扩展为一系列关键字赋值,因此

'{say} => {get}'.format(**D)

< /块引用>< /块引用>

变成

'{say} => {get}'.format(say = 5, get = shrubbery)

< /块引用>< /块引用>

由于关键字参数是字典,所以**Kwargs技巧有效。


简短的回答,我相信稍后会有人提出一篇论文。

这里的**D表示将使用字典D来填充字符串格式中的"命名孔"。如你所见,{say}5取代,{get}shrubbery取代。

实际上,它与用于向函数传递任意数量参数的机制相同;format期望的参数与字符串中的"孔"一样多。如果你想用字典把它们包起来,你就是这样做的。

如prashant所建议的,有关更多信息,请查看python文档中的关键字参数和解包。