Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 21, 2023 05:52:40

vladimir_vl_vlad
Зарегистрирован: 2021-07-16
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

При помощи argparse передать в кач. аргументов произвольное число кортежей

Есть функция которая принимает в качестве аргументов произвольное число кортежей (каждый кортеж содержит три целых числа), не могу понять как передать ей эти аргументы из командной строки при помощи модуля argparse, у меня получается передать только один кортеж

 def func(*argms):
    for tpl in argms:
        for num in tpl:
            print(num)
parser = argparse.ArgumentParser()
parser.add_argument('--get_values', nargs='+', type=int)
args = parser.parse_args()
my_tuple = tuple(args.get_values)
func(my_tuple)

Команда в терминале примерно такая:
python argparse_probe.py –get_values 11 22 33
ну т.е. если из командной строки предается не 3, а 6 чисел, то они должны передаться в функцию как 2 кортежа по 3 числа. Короче, тут я в затруднении, буду рад помощи.

Офлайн

#2 Авг. 21, 2023 05:58:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

При помощи argparse передать в кач. аргументов произвольное число кортежей

Это не надо в argparse делать, это надо просто через argparse принять их все в качестве списка чисел непрерывного, на этом argsparse свою функцию выполнил (он может проверить длину списка и выдать ошибку, если она не кратна трём), а потом этот непрерывный список чисел внутри кода уже берётся и нарезается по три элемента списка.

  
>>> def slice3(lst):
...     i, length = 0, len(lst)
...     while i + 3 <= length:
...         a, b, c = lst[i], lst[i+1], lst[i+2]
...         i += 3
...         yield a, b, c
... 
>>> list(slice3([]))
[]
>>> list(slice3([1]))
[]
>>> list(slice3([1, 2]))
[]
>>> list(slice3([1, 2, 3]))
[(1, 2, 3)]
>>> list(slice3([1, 2, 3, 4]))
[(1, 2, 3)]
>>> list(slice3([1, 2, 3, 4, 5]))
[(1, 2, 3)]
>>> list(slice3([1, 2, 3, 4, 5, 6]))
[(1, 2, 3), (4, 5, 6)]
>>> list(slice3([1, 2, 3, 4, 5, 6, 7]))
[(1, 2, 3), (4, 5, 6)]
>>>



Отредактировано py.user.next (Авг. 21, 2023 06:05:43)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version