2013-08-29 5 views
0

Я читаю программирование Python и не могу понять, что ** D означает следующие коды:Что означает ** D mean в string.format (** D)?

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

Я гугл ** kwargs в питоне и большинство результатов говорит о функции, чтобы взять произвольное количество аргументов ключевого слова.

string.format (** D) здесь не выглядит чем-то, чтобы позволить функции принимать произвольное количество аргументов ключевого слова, потому что я вижу, что переменная типа словаря D является всего лишь одним аргументом. Но что это значит?

+3

Вы видели http://stackoverflow.com/questions/3394835/args-and-kwargs? –

+0

Да, я действительно смотрел на этот вопрос, но я не мог установить связи там. ** kwargs там появляется только в функции def, а не при вызове функций или методов. – wokbot

+0

Я упустил ответ на вопрос http://stackoverflow.com/q/1415812/2719588, данный Алексом Мартелли. Он сделал очень хорошую мысль: «Что касается использования ** kw в вызове», ... ... – wokbot

ответ

2

Короткий ответ, я уверен, что кто-то придумает диссертацию позже.

**D здесь означает, что словарь D будет использоваться для заполнения «названных отверстий» в строковом формате. Как вы можете видеть, {say} заменен на 5 и {get} заменен на shrubbery.

Фактически это тот же механизм, что и тот, который используется для передачи произвольного числа параметров функции; format ожидает столько параметров, сколько «дыр» в строке. Если вы хотите их обернуть в словаре, вот как вы это делаете.

Для получения дополнительной информации, проверьте keyword arguments и unpacking, в документации Python, как предложил Прашант.

+0

3 ответы в совокупности дали мне четкое представление о том, что это такое. Спасибо за ваше простое подробное объяснение и легко понять ответ! – wokbot

2

** D используется для распаковки аргументов. Он расширяет словарь в последовательности заданий по ключевым словам, так

'{скажем} => {получить}'. Формат (** D)

становится

' {Скажем} => {получить}». Формат (скажем, = 5, получаем = кустарника)

** kwargs трюк работает, потому что именованные аргументы словари.

Смежные вопросы