В параметрах функции * упаковывает позиционные аргументы в *args, а при вызове он распаковывает итерируемый объект в позиционные аргументы.
Пример
def add(a: int, b: int) -> int:
return a + b
nums = [2, 3]
add(*nums)
Разбор
* также используется при назначении для захвата «остальных» элементов.
Суммируя:
* — универсальный оператор для работы с переменными аргументами.
- В подпись пакует, а в вызов распаковывает.
- Это уменьшает шаблонность при передаче данных.
Итог
В параметрах функции * упаковывает позиционные аргументы в *args, а при вызове он распаковывает итерируемый объект в позиционные аргументы.