如何使用 argparse 指定范围?

How to specify a range using argparse?

我的解析器声明如下:

parser.add_argument(
    '--degree',
    type=int,
    default=3,
    nargs="*",
    help="Degree of the 'poly' kernel. (default=3)."
)

我想指定一个范围,而不仅仅是使用 nargs。

例如:0 8 2 (start, stop, step) 应该指定我想要值 0 2 4 6 8。

我应该只使用 np.arange 作为数据类型,还是只指定 3 个参数并自己创建数组。有更好的方法请LMK

您可以设置 nargs=3 要求参数有 3 个值。


parser.add_argument(
    '--degree',
    type=int,
    default=3,
    nargs=3,
)

args = parser.parse_args(['--degree', '1', '2', '3'])
numpy_arr = np.arange(*args.degree)

或者,您可以传递 comma-separated 值并使用 type 将值转换为范围:

def get_np_arange(value):
   try:
       values = [int(i) for i in value.split(',')]
       assert len(values) in (1, 3)
   except (ValueError, AssertionError):
       raise argparse.ArgumentTypeError(
           'Provide a CSV list of 1 or 3 integers'
       )

   # return our value as is if there is only one
   if len(values) == 1:
       return np.array(values)

   # if there are three - return a range
   return np.arange(*values)


parser.add_argument(
    '--degree',
    type=get_np_arange,
)

args = parser.parse_args()
numpy_arr = args.degree
print(numpy_arr)

示例输出:

➜  ~ python test.py --degree 1,2    
usage: prog [-h] --degree DEGREE
prog: error: argument --degree: Provide a CSV list of 1 or 3 integers
➜  ~ python test.py --degree a,2,3
usage: prog [-h] --degree DEGREE
prog: error: argument --degree: Provide a CSV list of 1 or 3 integers
➜  ~ python test.py --degree 20
[20]
➜  ~ python test.py --degree 1,10,4
[1 5 9]