title: What does **D mean in string.format(**D)?
body: <p>I am reading Programming Python and can't figure out what the **D mean in the following codes:</p>
  
  <pre><code>&gt;&gt;&gt; D = {'say': 5, 'get': 'shrubbery'}
  &gt;&gt;&gt; '%(say)s =&gt; %(get)s' % D
  '5 =&gt; shrubbery'
  &gt;&gt;&gt; '{say} =&gt; {get}'.format(**D)
  '5 =&gt; shrubbery'
  </code></pre>
  
  <p>I googled **kwargs in python and most of the results are talking about to let functions take an arbitrary number of keyword arguments.</p>
  
  <p>The string.format(**D) here doesn't look like something to let function take an arbitrary number of keyword arguments because I see the dictionary type variable D is just one argument. But what does it mean here?</p>