2010-12-15 33 views
3

En python2.7, le module argparse a une méthode add_argument qui peut prendre un nombre variable d'arguments anonymes avant ses arguments mot-clé comme indiqué ci-dessous:Comment add_argument de argparse prend-il des arguments de longueur variable avant les mots-clés?

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

Pour autant que je sache, les définitions de fonction comme suit n » travail t:

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

Qu'est-ce que les moyens appropriés pour simuler le comportement add_argument?

Répondre

3

ordre de définition de l'argument de Python est ...

  1. requis et/ou arguments valeur par défaut (le cas échéant)
  2. longueur variable arguments de position placeholder (*<name> si désiré)
  3. arguments de mot-clé placeholder (**<name> si vous le souhaitez)

L'espace réservé aux arguments positionnels reçoit une liste, le mot clé arguments placeholder reçoit un dict. Il suffit de rechercher les clés dans les arguments du mot clé, plutôt que d'épeler tous les arguments possibles dans la déclaration. Quelque chose dans le sens de ...

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