无需任何花哨的工作,我就可以设置一对写入同一 dest 的参数,并利用最后一次写入的事实:
In [765]: parser=argparse.ArgumentParser()
In [766]: a1=parser.add_argument('-y',action='store_true')
In [767]: a2=parser.add_argument('-n',action='store_false')
如果没有dest 参数,它们会使用从选项字符串中提取出来的名称。但我可以提供dest,或者在创建后更改该值:
In [768]: a1.dest
Out[768]: 'y'
In [769]: a2.dest
Out[769]: 'n'
In [770]: a1.dest='switch'
In [771]: a2.dest='switch'
现在使用任何一个都将设置switch 属性。
In [772]: parser.parse_args([])
Out[772]: Namespace(switch=False)
默认值来自第一个定义的参数。这是在解析开始时如何设置默认值的函数。对于所有其他输入,它是设置值的最后一个参数
In [773]: parser.parse_args(['-y'])
Out[773]: Namespace(switch=True)
In [774]: parser.parse_args(['-n'])
Out[774]: Namespace(switch=False)
In [775]: parser.parse_args(['-n','-y','-n','-y'])
Out[775]: Namespace(switch=True)
In [776]: parser.parse_args(['-n','-y','-n'])
Out[776]: Namespace(switch=False)
也可以使用单独的命令设置默认值:
parser.set_defaults(switch='foo')
如果您想经常使用这种功能,您可以编写一个小实用函数,创建带有任何标志和目标的参数对。甚至有这样一个增强的错误/问题请求,但我怀疑它是否会被实施。