Рекомендуемые модули Python для обработки аргументов функций?

Существует множество модулей Python для разбора и согласования параметров командной строки (argparse, getopt, blargs и т.д.). И Python благословлен хорошими встроенными возможностями/идиомами для обработки различных аргументов функций (например, значения по умолчанию, *varargs, **keyword_args). Но когда я читаю код различных проектов для функций верхнего уровня, я вижу значительно меньшую дисциплину и стандартизацию аргументов функций, чем аргументов командной строки.

Для простых функций это не является проблемой; встроенные функции аргументов работают отлично и их более чем достаточно. Но есть много функционально богатых модулей, чьи функции верхнего уровня предоставляют множество различных аргументов и опций (некоторые дополняют или исключают друг друга), различные режимы работы, значения по умолчанию, переопределения и т.д. - то есть, сложность аргументов приближается к сложности аргументов командной строки. И они, похоже, в основном обрабатывают свои аргументы специальными способами.

Учитывая количество модулей обработки командной строки, и то, насколько они усовершенствовались со временем, я ожидал бы, по крайней мере, несколько модулей для упрощения работы со сложными аргументами функций. Но я безуспешно искал в PyPi, stackoverflow и Google. Итак... есть ли модули обработки аргументов функций (не командной строки!), которые вы могли бы порекомендовать?

---обновить примером---

Трудно привести действительно простой конкретный пример, потому что случай использования не появляется, пока вы не имеете дело со сложным модулем. Но вот попытка объяснить проблему в коде: Модуль форматера с параметрами по умолчанию, которые могут быть переопределены при инстанцировании форматера или при вызове функции/метода. Для того, чтобы иметь всего несколько опций, здесь уже очень много словоблудия по обработке опций, и имена опций повторяются ad nauseam.

defaults = { 'indent':     4,
              'prefix':    None,
              'suffix':    None,
              'name':      'aFormatter',
              'reverse':   False,
              'show_name': False
            }

class Formatter(object):

    def __init__(self, **kwargs):
        self.name    = kwargs.get('name',    defaults['name'])
        self.indent  = kwargs.get('indent',  defaults['indent'])
        self.prefix  = kwargs.get('prefix',  defaults['prefix'])
        self.suffix  = kwargs.get('suffix',  defaults['suffix'])
        self.reverse = kwargs.get('reverse', defaults['reverse'])
        self.show_name = kwargs.get('show_name', defaults['show_name'])

    def show_lower(self, *args, **kwargs):
        indent = kwargs.get('indent', self.indent) or 0
        prefix = kwargs.get('prefix', self.prefix) 
        suffix = kwargs.get('suffix', self.suffix)
        reverse = kwargs.get('reverse', self.reverse)
        show_name = kwargs.get('show_name', self.show_name)

        strings = []
        if show_name:
            strings.append(self.name + ": ")
        if indent:
            strings.append(" " * indent)
        if prefix:
            strings.append(prefix)
        for a in args:
            strings.append(a.upper() if reverse else a.lower())
        if suffix:
            strings.append(suffix)
        print ''.join(strings)

if __name__ == '__main__':
    fmt = Formatter()
    fmt.show_lower("THIS IS GOOD")
    fmt.show_lower("THIS", "IS", "GOOD")
    fmt.show_lower('this IS good', reverse=True)
    fmt.show_lower("something!", show_name=True)

    upper = Formatter(reverse=True)
    upper.show_lower("this is good!")
    upper.show_lower("and so is this!", reverse=False)
5
задан Jonathan Eunice 23 February 2012 в 17:42
поделиться