如何使用 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]
我的解析器声明如下:
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]