Come fa add_argument di argparse prendere argomenti di lunghezza variabile prima di argomenti a parola chiave?
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
?
Soluzione
Per definizione l'argomento di Python è ...
- richiesti e / o di default a valore argomenti (se presenti)
- lunghezza variabile posizionale argomenti segnaposto (
*<name>
se desiderato) - 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 .