¿Cómo add_argument de argparse tomar argumentos de longitud variable antes de argumentos de palabra clave?

StackOverflow https://stackoverflow.com/questions/4446275

  •  10-10-2019
  •  | 
  •  

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?

¿Fue útil?

Solución

orden de los argumentos definición de Python es ...

  1. requeridos y / o falta de valor de argumentos (si los hay)
  2. longitud variable posicional argumentos marcador de posición (*<name> si se desea)
  3. 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 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top