Python argparse:如何设置带默认值的关键字参数?相关疑问解析
关于argparse命令行参数配置的疑问解答
原代码
def parse_arguments(args): parser = argparse.ArgumentParser(usage=argparse_usage()) parser.add_argument('mic', type=str) parser.add_argument('date_range', type=str) parser.add_argument('sleep_time', type=int, nargs="?", default=1) parser.add_argument('force', type=bool, action='store_false')
疑问
- 如何将最后一个参数
force设为默认值为False的关键字参数?这是否可行? - 使用
store_false是否能实现将其默认值设为False的需求?
解答
问题1:将force设为默认False的关键字参数
完全可行,但需要把它改成可选关键字参数(带--前缀),同时调整action配置。位置参数(不带前缀)不适合做这类开关型参数,因为位置参数需要按顺序输入,而开关参数通常是可选的。
修改后的代码示例:
def parse_arguments(args): parser = argparse.ArgumentParser(usage=argparse_usage()) parser.add_argument('mic', type=str) parser.add_argument('date_range', type=str) parser.add_argument('sleep_time', type=int, nargs="?", default=1) # 改为关键字参数,默认值False,用户输入--force时设为True parser.add_argument('--force', action='store_true', default=False)
- 用
--force标记该参数为关键字参数,用户可以选择是否输入 action='store_true'表示:用户输入--force时,参数值为True;不输入则保持默认的False
问题2:store_false能否实现默认值为False?
不能,你的用法刚好搞反了store_false的逻辑:
store_false的默认值是True,当用户在命令行指定该参数时,才会把值改成False- 如果要默认值为False,用户输入参数时设为True,应该用
action='store_true'
另外,你当前把force定义为位置参数,再搭配store_false会导致逻辑混乱——位置参数是必须按顺序传入的,而store_false这类action本来就是为可选的关键字参数设计的。
内容的提问来源于stack exchange,提问作者user21641220
相关产品推荐
相关产品推荐

