143
parser.add_argument('-auto', action='store_true')

-auto如果未指定,我如何存储 false ?我可以依稀记得这样,如果未指定,它会存储 None

4

4 回答 4

234

store_true选项会自动创建一个默认值False

同样,当命令行参数不存在时,store_false将默认为True 。

这种行为的来源简洁明了: http ://hg.python.org/cpython/file/2.7/Lib/argparse.py#l861

argparse 文档在这个主题上不清楚,所以我现在更新它们:http: //hg.python.org/cpython/rev/49677cc6d83a

于 2011-11-20T18:31:42.200 回答
22

import argparse
parser=argparse.ArgumentParser()
parser.add_argument('-auto', action='store_true', )
args=parser.parse_args()
print(args)

跑步

% test.py

产量

Namespace(auto=False)

所以它似乎是False默认存储的。

于 2011-11-20T18:24:28.740 回答
4

Raymond Hettinger 已经回答了 OP 的问题。

但是,我的小组在使用“store_false”时遇到了可读性问题。尤其是当新成员加入我们的小组时。这是因为最直观的思考方式是,当用户指定一个参数时,该参数对应的值将是 True 或 1。

例如,如果代码是 -

parser.add_argument('--stop_logging', action='store_false')

当 stop_logging 中的值为 true 时,代码阅读器可能希望日志记录语句关闭。但是像下面这样的代码会导致与期望的行为相反的行为——

if not stop_logging:
    #log

另一方面,如果接口定义如下,那么“if-statement”可以工作并且更直观地阅读 -

parser.add_argument('--stop_logging', action='store_true')
if not stop_logging:
    #log
于 2019-06-09T20:22:01.237 回答
-6

store_false 实际上会默认为0默认值(您可以测试验证)。要更改它的默认值,只需添加default=True到您的声明中。

所以在这种情况下: parser.add_argument('-auto', action='store_true', default=True)

于 2015-06-01T20:49:10.127 回答