Python:设置配置参数

时间:2011-10-21 18:29:22

标签: function python

您首选的处理配置参数的方式是什么?

例如:

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)方式吗?

2 个答案:

答案 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...