argparse中add_argument的const参数能否访问default参数的值?
问题:argparse中const参数能否直接引用default的值?
假设你有一个Python程序,仅包含一个选项且无位置参数,该选项接受可选的整数参数,规则如下:
- 未指定选项时使用默认值
- 指定选项但未传参数时,仍使用该默认值
- 指定选项并传参数时,使用选项参数指定的值
当前实现代码如下:
from argparse import ArgumentParser parser = ArgumentParser() parser.add_argument('-n', '--number', type=int, default=42, nargs='?', const=42, help='Number (default: %(default)d)') arg = parser.parse_args() print(arg.number)
现在的问题是:后续修改默认值时需要同时改动default和const两处,虽然可以通过定义常量复用,但想知道const参数能不能像help参数那样直接访问default指定的值?
解答
不行,argparse的const参数并不支持像help那样通过%(default)s这类占位符来引用default的值。help字段的占位符是argparse专门做的解析逻辑,仅对help字段生效,const会直接使用你传入的原始值,不会解析这类占位符。
不过可以用两种简单的方式实现只维护一处默认值的需求:
方案一:定义常量复用
提前把默认值定义成常量,之后default和const都引用这个常量,修改时只改常量即可:
from argparse import ArgumentParser DEFAULT_NUMBER = 42 parser = ArgumentParser() parser.add_argument('-n', '--number', type=int, default=DEFAULT_NUMBER, nargs='?', const=DEFAULT_NUMBER, help='Number (default: %(default)d)') arg = parser.parse_args() print(arg.number)
方案二:事后修改const属性
先添加参数,之后直接把const设置为参数的default属性值,这样只需要在add_argument里维护default:
from argparse import ArgumentParser parser = ArgumentParser() # 先添加参数,暂不设置const arg_option = parser.add_argument('-n', '--number', type=int, default=42, nargs='?', help='Number (default: %(default)d)') # 直接引用default的值赋值给const arg_option.const = arg_option.default arg = parser.parse_args() print(arg.number)
内容的提问来源于stack exchange,提问作者bontchev
相关产品推荐
相关产品推荐

