现在--resize
我创建的标志是布尔值,意味着我的所有对象都将调整大小:
parser.add_argument("--resize", action="store_true", help="Do dictionary resize")
# ...
# if resize flag is true I'm re-sizing all objects
if args.resize:
for object in my_obects:
object.do_resize()
有没有办法实现 argparse 参数,如果作为布尔标志传递(--resize
) 将返回 true,但如果传递值 (--resize 10
),将包含值。
Example:
python ./my_script.py --resize # Will contain True that means, resize all the objects
python ./my_script.py --resize <index> # Will contain index, that means resize only specific object
为了有选择地接受一个值,您需要设置nargs to '?'
。如果指定的话,这将使参数消耗一个值。如果指定了参数但没有值,则该参数将被分配给该参数的constvalue,所以这也是您需要指定的:
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
这样参数值将被自动解析为整数。这不会影响默认或常量情况,所以你仍然得到None
or 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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)