Respostas:
A store_trueopção cria automaticamente um valor padrão False .
Da mesma forma, store_falseo padrão será True quando o argumento da linha de comando não estiver presente.
A fonte para esse comportamento é sucinta e clara: http://hg.python.org/cpython/file/2.7/Lib/argparse.py#l861
Os documentos do argparse não são claros sobre o assunto, então vou atualizá-los agora: http://hg.python.org/cpython/rev/49677cc6d83a
Raymond Hettinger já respondeu à pergunta de OP.
No entanto, meu grupo teve problemas de legibilidade ao usar "store_false". Especialmente quando novos membros se juntam ao nosso grupo. Isso ocorre porque é a maneira mais intuitiva de pensar que, quando um usuário especifica um argumento, o valor correspondente a esse argumento será Verdadeiro ou 1.
Por exemplo, se o código for -
parser.add_argument('--stop_logging', action='store_false')
O leitor de código provavelmente pode esperar que a instrução de log seja desativada quando o valor em stop_logging for true. Mas um código como o seguinte levará ao oposto do comportamento desejado -
if not stop_logging:
#log
Por outro lado, se a interface for definida da seguinte forma, a "instrução if" funciona e é mais intuitiva de ler -
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 realmente será o padrão 0por padrão (você pode testar para verificar). Para alterar o padrão, basta adicionar default=Trueà sua declaração.
Portanto, neste caso:
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, odestserá automaticamente definido comobar, com base em hg.python.org/cpython/rev/49677cc6d83a . No entanto, não vejo onde esse comportamento padrão é definido no código. Sempre defini odestargumento explicitamente. Além disso, acho que deixar a opção forbarpadrão não faz muito sentido se for . Não deveria ser neste caso?dest--bar--barstore_falsedestnotbar