Единственные известные мне способы, которые включают каким-то образом "упаковку" параметров.
Из-за того, как работают var-args, вы можете немного изменить свой порядок и принять аргументы как var-args:
def foobar(d: str, *args: int): …
args
теперь содержит a
, b
и c
(вместе со всем, что еще пропущено).
Вдоль тех же строк вы можете передать в list:
from typing import List
def foobar(args: List[int], d: str): …
По сути, это то же самое, что и выше.
Конечно, они оба имеют недостаток Серьезный , который вы больше не имеете возможности stati c - проверить арность; что, возможно, еще хуже проблемы, чем неспособность проверить тип c.
Вы можете мягко обойти это, используя кортеж, чтобы обеспечить длину:
from typing import Tuple
def foobar(args: Tuple[int, int, int], d: str): …
Но, конечно, в нем столько же повторений, сколько в исходном коде (и требуется упаковка аргументов в кортеж), поэтому выигрыша на самом деле нет.
Я не знаю ни одного «безопасного» способа сделать буквально что хочешь.