1

我正在阅读 Programming Python 并且无法弄清楚以下代码中 **D 的含义:

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

我在 python 中搜索了 **kwargs,大多数结果都在谈论让函数采用任意数量的关键字参数。

这里的 string.format(**D) 看起来不像让函数采用任意数量的关键字参数,因为我看到字典类型变量 D 只是一个参数。但这意味着什么?

4

3 回答 3

4

参数解包似乎是您正在寻找的。

于 2013-08-29T23:54:28.033 回答
3

**D用于解包参数。它将字典扩展为一系列关键字分配,所以......

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

变成……

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

这个**kwargs技巧有效,因为关键字参数是字典

于 2013-08-30T00:04:43.200 回答
2

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

**D这里的意思是字典D将用于填充字符串格式的“命名孔”。如您所见,{say}被替换5并被{get}替换shrubbery

实际上,它与用于将任意数量的参数传递给函数的机制相同。format期望与字符串中的“孔”一样多的参数。如果您想将它们包装在字典中,那就是您的做法。

有关更多信息,请按照 Prashant 的建议检查Python文档中的关键字参数和解包。

于 2013-08-30T00:02:34.573 回答