Réponses:
L' store_trueoption crée automatiquement une valeur par défaut False .
De même, la store_falsevaleur par défaut est True lorsque l'argument de ligne de commande n'est pas présent.
La source de ce comportement est succincte et claire: http://hg.python.org/cpython/file/2.7/Lib/argparse.py#l861
La documentation argparse n'est pas claire sur le sujet, je vais donc les mettre à jour maintenant: http://hg.python.org/cpython/rev/49677cc6d83a
Raymond Hettinger répond déjà à la question d'OP.
Cependant, mon groupe a rencontré des problèmes de lisibilité en utilisant "store_false". Surtout lorsque de nouveaux membres rejoignent notre groupe. En effet, la manière la plus intuitive de penser est que lorsqu'un utilisateur spécifie un argument, la valeur correspondant à cet argument sera True ou 1.
Par exemple, si le code est -
parser.add_argument('--stop_logging', action='store_false')
Le lecteur de code peut s'attendre à ce que l'instruction de journalisation soit désactivée lorsque la valeur de stop_logging est vraie. Mais un code tel que le suivant conduira à l' opposé du comportement souhaité -
if not stop_logging:
#log
D'un autre côté, si l'interface est définie comme suit, alors le "if-statement" fonctionne et est plus intuitif à lire -
parser.add_argument('--stop_logging', action='store_true')
if not stop_logging:
#log
parser.add_argument('--stop_logging', action='store_false', dest='use_logging').
store_false sera en fait 0par défaut par défaut (vous pouvez tester pour vérifier). Pour modifier la valeur par défaut, ajoutez simplement default=Trueà votre déclaration.
Donc dans ce cas:
parser.add_argument('-auto', action='store_true', default=True)
>>> parser.add_argument('--bar', action='store_false') _StoreFalseAction(option_strings=['--bar'], dest='bar', nargs=0, const=False, default=True, type=None, choices=None, help=None, metavar=None) >>> parser.parse_args([]) Namespace(bar=True)
-bar, alors ledestest automatiquement défini surbar, basé sur hg.python.org/cpython/rev/49677cc6d83a . Cependant, je ne vois pas où ce comportement par défaut est défini dans le code. J'ai toujours défini l'destargument explicitement. De plus, je pense que laisserbarpar défautdestl'--baroption pour l' option n'a pas vraiment de sens si--barc'est le casstore_false. Cela ne devrait-il pasdestêtrenotbardans ce cas?