下面介绍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 参数中设置的任何值。如果参数不存在,则采用default 参数中指定的值。
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
使用const 而不使用default
现在如果您没有指定default 怎么办?那么,在这种情况下,default 只是假设None 的值如下所示:
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
布尔参数的快捷方式
现在您可以看到 const 和 default 的值通常与布尔参数相反。为了方便起见,Python 提供了称为store_true 和store_false 的快捷操作。 store_true 与 const=True 和 default=False 相同。 store_false 反过来。