我正在阅读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只是一个参数。但这在这里意味着什么?
答案 0 :(得分:4)
Argument unpacking似乎就是你要找的东西。
答案 1 :(得分:2)
简短的回答,我相信有人会在以后提出论文。
**D
这里意味着字典D
将用于填充字符串格式的“命名孔”。正如您所看到的,{say}
被5
取代,{get}
被shrubbery
取代。
实际上,它与用于将任意数量的参数传递给函数的机制相同; format
期望与字符串中的“洞”一样多的参数。如果你想把它们包装在一本字典中,你就是这样做的。
有关详细信息,请参阅Prashant建议的Python文档中的keyword arguments和unpacking。
答案 2 :(得分:2)
** D用于解包参数。它将字典扩展为一系列关键字分配,所以
'{say} => {得到}”。格式(** d)
变为
'{say} => {get}'.format(比如= 5,get = shrubbery)
** kwargs技巧有效,因为关键字参数是字典。