Python: настройка параметров конфигурации - PullRequest
3 голосов
/ 21 октября 2011

Какой способ обработки параметров вы предпочитаете?

Например:

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

Есть ли лучший (более питонический) способ?

Ответы [ 2 ]

3 голосов
/ 21 октября 2011

Если возможные параметры и значения по умолчанию фиксированы, 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 голос
/ 21 октября 2011

Мне лично нравится проходить по паре ключ / значение так:

def test(**kw):
    for k, v in kw.items():
        if k == 'this':
            something = v
        # etc...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...