擅长:python、mysql、java
<p>为每个函数中的每个<code>**kwargs</code>参数构建一个新字典。这是因为<em>call</em><code>**kwargs</code>语法与函数签名中的语法不同</p>
<ul>
<li>在call中使用<code>**kwargs</code>会导致字典被解压为单独的关键字参数。在</li>
<li>使用<code>**kwargs</code>作为catch all参数会导致从传入的关键字参数生成字典。在</li>
</ul>
<p>即使不是这样,Python也不能通过共享字典来优化。函数<code>foo()</code>调用<code>bar()</code>必须处理传递到调用中的字典<code>kwargs</code>可能发生变化的情况。在</p>
<p>所以,不,在一系列相连的函数中使用<code>**kwargs</code>并不能提高效率。在</p>
<p>一个快速演示,演示传递给一系列函数的字典是不同的:</p>
<pre><code>>>> def a(**kwargs):
... print('a', id(kwargs))
... b(**kwargs)
...
>>> def b(**kwargs):
... print('b', id(kwargs))
...
>>> a(foo='bar')
a 4556474552
b 4557517304
</code></pre>
<p>如果字典是共享的,它们的<code>id()</code>值也将相同。在</p>
<p>如果要在函数之间传递共享状态,请显式地这样做。直接把字典传下去,例如:</p>
^{pr2}$