parser.add_argument('-auto', action='store_true')
-auto
如果未指定,我如何存储 false ?我可以依稀记得这样,如果未指定,它会存储 None
parser.add_argument('-auto', action='store_true')
-auto
如果未指定,我如何存储 false ?我可以依稀记得这样,如果未指定,它会存储 None
该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
和
import argparse
parser=argparse.ArgumentParser()
parser.add_argument('-auto', action='store_true', )
args=parser.parse_args()
print(args)
跑步
% test.py
产量
Namespace(auto=False)
所以它似乎是False
默认存储的。
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
store_false 实际上会默认为0
默认值(您可以测试验证)。要更改它的默认值,只需添加default=True
到您的声明中。
所以在这种情况下:
parser.add_argument('-auto', action='store_true', default=True)