no puedo entender qué significa **D en los siguientes códigos:
>>> D = {'say': 5, 'get': 'shrubbery'}
>>> '%(say)s => %(get)s' % D
'5 => shrubbery'
>>> '{say} => {get}'.format(**D)
'5 => shrubbery'
Busqué en Google ** kwargs en python y la mayoría de los resultados hablan de permitir que las funciones tomen una cantidad arbitraria de argumentos de palabras clave.
El string.format(**D) aquí no parece algo que permita que la función tome un número arbitrario de argumentos de palabras clave porque veo que la variable de tipo de diccionario D es solo un argumento. Pero, ¿qué significa aquí?
Se llama desempaque de argumentos **Dse utiliza para desempaquetar argumentos. Expande el diccionario en una secuencia de asignaciones de palabras clave , así que...
'{say} => {get}'.format(**D)
se convierte...
'{say} => {get}'.format(say = 5, get = shrubbery)
El **kwargstruco funciona porque los argumentos de palabras clave son diccionarios .
te dejo un link si quieres saber mas del tema https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists