您首选的处理配置参数的方式是什么?
例如:
test(this=7)
可以通过以下方式处理:
def test(**kw):
this = kw.pop('this', 1)
that = kw.pop('that', 2)
或
def test(**kw):
if 'this' in kw:
this = kw['this']
else:
this = 1
if 'that' in kw:
that = kw['that']
else:
that = 2
有更好的(更加pythonic)方式吗?
答案 0 :(得分:3)
如果可能的参数和默认值是固定的,那么Pythonic的方法是写:
def test(this=1, that=2):
...
如果参数列表是动态的,那么使用 kwds.pop()的方法可以让您验证是否使用了所有参数(例如,检测拼写错误的参数名称)。查看collections.namedtuple('Point', ['x', 'y'], verbose=True)
生成的代码中的片段是有益的。注意最后检查以确保所有参数都是从kwds中消耗的:
def _replace(_self, **kwds):
'Return a new Point object replacing specified fields with new values'
result = _self._make(map(kwds.pop, ('x', 'y'), _self))
if kwds:
raise ValueError('Got unexpected field names: %r' % kwds.keys())
return result
答案 1 :(得分:1)
我个人喜欢像这样循环键/值对:
def test(**kw):
for k, v in kw.items():
if k == 'this':
something = v
# etc...