Come fa add_argument di argparse prendere argomenti di lunghezza variabile prima di argomenti a parola chiave?

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

  •  10-10-2019
  •  | 
  •  

Domanda

In python2.7, il modulo argparse ha un metodo add_argument che può assumere un numero variabile di argomenti anonimi prima suoi argomenti chiave come illustrato di seguito:

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

Per quanto ne so, le definizioni di funzioni come segue non funzionano:

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

Qual è il mezzo adeguati per emulare il comportamento add_argument?

È stato utile?

Soluzione

Per definizione l'argomento di Python è ...

  1. richiesti e / o di default a valore argomenti (se presenti)
  2. lunghezza variabile posizionale argomenti segnaposto (*<name> se desiderato)
  3. argomenti parola chiave segnaposto (**<name> se lo si desidera)

Gli argomenti posizionali segnaposto ottiene un elenco, la parola chiave argomenti segnaposto Ottiene un dict.

add_arguments sembra semplicemente per chiavi nella dict di argomenti a parola chiave, piuttosto che l'ortografia fuori tutti i possibili argomenti nella dichiarazione. Qualcosa sulla falsariga di ...

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

Altri suggerimenti

È possibile passare numero arbitrario di argomenti a una funzione.

Ecco un esempio

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

La lettura di questo aiuto sarà: http://docs.python.org/tutorial /controlflow.html#keyword-arguments .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top