要选择性地接受值,您需要设置nargs
为'?'
.如果指定了参数,这将使参数消耗一个值.如果指定了参数但没有值,那么将为参数赋值参数的const
值,这也是您需要指定的值:
parser = argparse.ArgumentParser() parser.add_argument('--resize', nargs='?', const=True)
这个论点现在有三种情况:
未指定:参数将获取其默认值(None
默认情况下):
>>> parser.parse_args(''.split()) Namespace(resize=None)
指定没有值:参数将获得其const值:
>>> parser.parse_args('--resize'.split()) Namespace(resize=True)
用值指定:参数将获得指定的值:
>>> parser.parse_args('--resize 123'.split()) Namespace(resize='123')
由于您正在查找索引,因此您还可以指定type=int
参数值将自动解析为整数.这不会影响默认情况或const情况,因此您仍然可以获得None
或True
在这种情况下:
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('--resize', nargs='?', type=int, const=True) >>> parser.parse_args('--resize 123'.split()) Namespace(resize=123)
您的用法将如下所示:
if args.resize is True: for object in my_objects: object.do_resize() elif args.resize: my_objects[args.resize].do_resize()