¿Cómo add_argument de argparse tomar argumentos de longitud variable antes de argumentos de palabra clave?
Pregunta
En python2.7, el módulo argparse tiene un método add_argument que puede tomar un número variable de argumentos sin nombre antes de su argumentos de palabra clave tal como se muestra a continuación:
parser = argparse.ArgumentParser(description='D')
parser.add_argument('-a', '-b', ... '-n', action='store', ... <other keyword args>)
Por lo que yo sé, la definición de funciones de la siguiente manera no trabajo:
def fxn(var_args*, action, otherstuff):
def fxn(action, otherstuff, var_args*): # results in conflict on action
¿Cuál es el medio adecuado para emular el comportamiento add_argument
?
Solución
orden de los argumentos definición de Python es ...
- requeridos y / o falta de valor de argumentos (si los hay)
- longitud variable posicional argumentos marcador de posición (
*<name>
si se desea) - argumentos de palabras clave de marcador de posición (
**<name>
si se desea)
Los argumentos posicionales marcador de posición obtiene una lista de palabras clave, los argumentos marcador de posición consigue un dict.
add_arguments
simplemente busca claves en el dict de los argumentos de palabras clave, en lugar de la ortografía a cabo todos los posibles argumentos en la declaración. Algo a lo largo de las líneas de ...
def add_arguments(*posargs, **kwargs):
if 'action' in kwargs:
# do something
Otros consejos
Puede pasar número arbitrario de argumentos a una función.
Este es un ejemplo
def f(x, *args, **kwargs):
print x
for arg in args:
print arg
for key, value in kwargs:
print key + ': ' + value
La lectura de esta ayuda será: http://docs.python.org/tutorial /controlflow.html#keyword-arguments .