我在argparse
文档中阅读了以下内容:
'
store_const
' - 存储const关键字指定的值 论点。 (请注意,const关键字参数默认为 没有帮助。)“store_const
”动作最常用 指定某种标志的可选参数。例如:>>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', action='store_const', const=42) >>> parser.parse_args('--foo'.split()) Namespace(foo=42)`
这与使用default
选项设置参数的默认值有何不同?
答案 0 :(得分:14)
parse_args(''.split())
你得到了什么?我期待foo=None
。
现在在参数定义中添加default='39'
。
default
是参数不存在时属性获得的值。 const
是给定时获得的值。另请注意,仅当操作为const
时(以及其他一些特殊情况),才允许store_const
。
请注意我定义store_true
操作时会发生什么:
In [30]: p.add_argument('--bar', action='store_true')
Out[30]: _StoreTrueAction(option_strings=['--bar'], dest='bar', nargs=0,
const=True, default=False, type=None, choices=None, help=None, metavar=None)
它创建的Action
对象具有const=True
属性和default=False
属性。它还有nargs=0
。具有这些特殊值的store_const
动作。
['高级'用户可以试用add_argument('--foo', nargs='?', default='one', const='two')
]。
答案 1 :(得分:2)
以下描述了default
和store_const
之间的区别。由于命名不正确,这的确会造成混乱。
Python基本上支持两种类型的参数:
具有价值的论点
示例:--seed 42
在这里,您可以使用默认参数将参数设为默认值。但是,您要么必须完全提交参数,要么将其包含值,如下所示:
parser = argparse.ArgumentParser()
parser.add_argument('--seed', default=42)
parser.parse_args('--seed 20'.split()) # seed is now 20
parser.parse_args(''.split()) # seed is now 42
parser.parse_args('--seed'.split()) # ERROR, must supply argument value
无价值的论点
示例:--no-cuda
此处您无法为参数提供附加值,无论参数存在还是不存在。这些类型的参数需要action = "store_const"
,并且其值必须在const
参数中提供,如下所示。您不能指定其他值。
parser = argparse.ArgumentParser()
parser.add_argument('--use-cuda', action='store_const', const=False, default=True)
parser.parse_args('--use-cuda'.split()) # use-cuda is now False
parser.parse_args(''.split()) # use-cuda is now True
parser.parse_args('--use-cuda True'.split()) # ERROR: unrecognized arguments: True
将default
与const
一起使用
现在,如果上面出现参数丢失时,如果您想要True而不是None怎么办?您可以将default
与const
结合使用!
parser = argparse.ArgumentParser()
parser.add_argument('--use-cuda', action='store_const', const=False)
parser.parse_args('--use-cuda'.split()) # use-cuda is now False
parser.parse_args(''.split()) # use-cuda is now None
parser.parse_args('--use-cuda True'.split()) # ERROR: unrecognized arguments: True
布尔参数的快捷方式
快捷键操作store_true
和store_false
与分别使用store_const
参数值True和False和const
参数值False和True的default
相同。