<pre><code>_allowed_keys = {'to', 'toname', 'x-smtpapi', ...]
def build_parameters(**kwargs):
return {key:value for key, value in kwargs.items() if key in _allowed_keys}
</code></pre>
<p>循序渐进:</p>
<ul>
<li>定义<code>_allowed_keys</code>以包含所有关键字参数的名称。有关详细信息,请参阅<a href="https://docs.python.org/2/library/stdtypes.html#set" rel="nofollow noreferrer">set documentation</a>。在</li>
<li>将参数替换为<code>**kwargs</code>。请参阅<a href="https://stackoverflow.com/questions/1769403/understanding-kwargs-in-python">Understanding kwargs in Python</a>以了解有关它的详细信息。在</li>
<li>使用<a href="https://stackoverflow.com/questions/1747817/python-create-a-dictionary-with-list-comprehension">dictionary comprehension</a>从<code>kwargs</code>生成新词典</li>
<li><code>items</code>用于迭代字典的键值对</li>
<li><code>key in _allowed_keys</code>我相信这是不言自明的</li>
</ul>
<p>因此,此函数接收任意数量的关键字参数,但筛选出不在<code>_allowed_keys</code>中的键。在</p>
<p><strong>UPD</strong>:好,<code>from</code>是一个关键字,<code>x-smtpapi</code>不能是关键字参数,因为它包含<code>-</code>。这是一个预期的行为,但是<a href="https://stackoverflow.com/questions/4179175/python-named-argument-is-keyword">canonical way</a>来解决它会使整个方法变得无用。在</p>
<p>因此,您需要以不同的方式表示它们,例如:</p>
^{pr2}$
<p>像这样使用<code>build_parameter(_from='from value', x_smtpapi: 'x-smtpapi value', ...)</code></p>
<p>不过,我不建议这样做,因为这可能会让人很困惑。相反,考虑其他方法,例如,构建一个类来封装创建<code>params</code>dict(并且可能使用它)</p>