Как 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...
- Обязательные и / или стандартные значения аргументов (если есть)
- позиционные аргументы переменной длины
*<name>
при желании) - ключевые слова аргументы заполнитель (
**<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.