<p>我同意使用<code>**kwargs</code>是一个好主意,而且可以使用set轻松清理它的键。我使用的是Python2.6,所以我没有设置理解,但是我的代码应该很容易翻译成更现代的版本。在</p>
<p>FWIW,我昨晚发布了这个程序的一个版本,但后来我决定它应该对坏参数做些什么,所以我临时删除了它。这是修改后的版本。在</p>
<p><strong>验证_参数py</strong></p>
<pre><code>#! /usr/bin/env python
''' Validate the keys in kwargs
Test keys against a container (set, tuple, list) of good keys,
supplying a value of None for missing keys
Also, if a key ends with an underscore, strip it.
Written by PM 2Ring 2014.11.15
From
http://stackoverflow.com/questions/26945235/best-practice-handle-functions-with-lots-of-parameters-and-reserved-names
'''
import sys
def test(**kwargs):
good_keys = ("container", "class_", "color",
"vassal", "level", "line", "filename",
"func", "with_total", "range")
new_kwargs = validate_keys(kwargs, good_keys)
for t in new_kwargs.items():
print "%-12s : %r" % t
#def alarms(**kwargs):
#good_keys = ("container", "class_", "color",
#"vassal", "level", "line", "filename",
#"func", "with_total", "range")
#return self.get('alarms', validate_keys(kwargs, good_keys))
def validate_keys(kwargs, good_keys):
good_keys = set(good_keys)
bad_keys = set(kwargs.keys()) - good_keys
if bad_keys:
bad_keys = ', '.join(bad_keys)
print >>sys.stderr, "Unknown parameters: %s\n" % bad_keys
raise KeyError, bad_keys
new_kwargs = {}
for k in good_keys:
new_kwargs[k.rstrip('_')] = kwargs.get(k, None)
return new_kwargs
test(color="red", class_="top",
#bar=1, foo=3, #Some bad keys
level=2, func="copy",filename="text.txt")
</code></pre>
<p><strong>输出</strong></p>
^{pr2}$