** D在string.format(** D)中的含义是什么?

时间:2013-08-29 23:50:35

标签: python string.format

我正在阅读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只是一个参数。但这在这里意味着什么?

3 个答案:

答案 0 :(得分:4)

Argument unpacking似乎就是你要找的东西。

答案 1 :(得分:2)

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

**D这里意味着字典D将用于填充字符串格式的“命名孔”。正如您所看到的,{say}5取代,{get}shrubbery取代。

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

有关详细信息,请参阅Prashant建议的Python文档中的keyword argumentsunpacking

答案 2 :(得分:2)

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

  
    
      

'{say} => {得到}”。格式(** d)

    
  

变为

  
    
      

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

    
  

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