Answers:
该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
Raymond Hettinger已经回答了OP的问题。
但是,我的小组使用“ store_false”遇到了可读性问题。特别是当新成员加入我们的小组时。这是因为最直观的思考方式是,当用户指定参数时,与该参数相对应的值为True或1。
例如,如果代码是-
parser.add_argument('--stop_logging', action='store_false')
当stop_logging中的值为true时,代码阅读器可能希望关闭日志记录语句。但是,如下所示的代码将导致所需行为的反面 -
if not stop_logging:
#log
另一方面,如果将接口定义为以下内容,则“ if语句”有效并且更直观地阅读-
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实际上将默认为0
默认值(您可以测试验证)。要更改默认设置,只需添加default=True
到声明中即可。
因此,在这种情况下:
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
,则似乎基于hg.python.org/cpython/rev/49677cc6d83adest
自动设置为。但是,我看不到在代码中设置此默认行为的位置。我一直在明确设置参数。另外,我觉得让默认为为选项并没有真正意义,如果是。不应该是在这种情况下?bar
dest
bar
dest
--bar
--bar
store_false
dest
notbar