Получить список целых чисел типа 0-10 с помощью argparse и не использовать никаких дополнительных библиотек в Python

#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