Как add_argument argparse принимает аргументы переменной длины перед аргументами ключевого слова?

В python2.7 модуль argparse имеет метод add_argument, который может принимать переменное число неназванных аргументов перед аргументами ключевого слова, как показано ниже:

parser = argparse.ArgumentParser(description='D')
parser.add_argument('-a', '-b', ... '-n', action='store', ... <other keyword args>)

Насколько я знаю, определения функций, как следует, не работают:

def fxn(var_args*, action, otherstuff):
def fxn(action, otherstuff, var_args*): # results in conflict on action

Как правильно подражать add_argument поведение?

2 ответа

Решение

Порядок определения аргументов в Python...

  1. Обязательные и / или стандартные значения аргументов (если есть)
  2. позиционные аргументы переменной длины*<name> при желании)
  3. ключевые слова аргументы заполнитель (**<name> при желании)

Заполнитель позиционных аргументов получает список, а заполнитель ключевых аргументов получает диктат.

add_arguments просто ищет ключи в поле аргументов ключевого слова, а не прописывает все возможные аргументы в объявлении. Что-то вроде...

def add_arguments(*posargs, **kwargs):
    if 'action' in kwargs:
        # do something

Вы можете передать произвольное количество аргументов функции.

Вот пример

def f(x, *args, **kwargs):
    print x
    for arg in args:
        print arg
    for key, value in kwargs:
        print key + ': ' + value

Чтение этого поможет: http://docs.python.org/tutorial/controlflow.html.

Другие вопросы по тегам