#python #argparse
#python #argparse
Вопрос:
Мне было интересно, есть ли у кого-нибудь идея использовать argparse для получения диапазона значений, таких как 0-10, и не использовать никаких дополнительных библиотек?
Пример:
>>python script.py --range 0-10
создаст список как
arg.range=[0,1,2,3,4,5,6,7,8,9,10]
Комментарии:
1.
argparse
это просто способ выяснить, чего хочет ваш пользователь. Это анализатор. Ваш собственный код действительно выполняет эту работу.2. Если вы можете принять
python script.py --range 0 10
, вы можете получить числа сtype=int
помощью иnargs=2
.
Ответ №1:
Вы можете разделить аргументы с помощью ‘-‘ и передать его в функцию range, которая, в свою очередь, будет передана в list . Это выведет последовательность
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--range")
args = parser.parse_args()
before, after = args.range.split('-')
print(list(range(int(before), int(after) 1)))
Комментарии:
1. Отлично, спасибо! Я ценю ваш ответ 🙂
Ответ №2:
Если мы немного изменим требования к вводу, мы можем предоставить переменное количество целых чисел, полностью используя возможности range
.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-r','--range', type=int, nargs=' ')
args = parser.parse_args()
print(args)
if len(args.range)>3:
parser.error('no more than 3 arguments, please')
elif len(args.range)==2: # or use nargs=2
start, stop = args.range
alist = list(range(start, stop))
else:
# more general case,
alist = list(range(*args.range))
print(alist)
пример выполнения
0838:~/mypy$ python3 stack65084869.py -h
usage: stack65084869.py [-h] [-r RANGE [RANGE ...]]
optional arguments:
-h, --help show this help message and exit
-r RANGE [RANGE ...], --range RANGE [RANGE ...]
0842:~/mypy$ python3 stack65084869.py 0 10
usage: stack65084869.py [-h] [-r RANGE [RANGE ...]]
stack65084869.py: error: unrecognized arguments: 0 10
0842:~/mypy$ python3 stack65084869.py --range 0 10
Namespace(range=[0, 10])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0842:~/mypy$ python3 stack65084869.py --range 10
Namespace(range=[10])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0843:~/mypy$ python3 stack65084869.py --range 10 -1 -1
Namespace(range=[10, -1, -1])
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
0847:~/mypy$ python3 stack65084869.py --range 10 -1 -1 0
Namespace(range=[10, -1, -1, 0])
usage: stack65084869.py [-h] [-r RANGE [RANGE ...]]
stack65084869.py: error: no more than 3 arguments, please