Что значит: * args и ** kwargs в Python? И зачем нам это использовать?
* args и ** kwargs - это общие идиомы, которые позволяют передать в функцию произвольное число аргументов.
*args нужен, когда мы хотим передать неизвестное количество неименованных аргументов. Если поставить * перед именем, это имя будет принимать не один аргумент, а несколько. Аргументы передаются как кортеж и доступны внутри функции под тем же именем, что и имя параметра, только без *. Например:

**kwargs нужен для передачи переменного количества именованных аргументов. Схоже с *args, если поставить ** перед именем, это имя будет принимать любое количество именованных аргументов. Кортеж/словарь из нескольких переданных аргументов будет доступен под этим именем. Например:

*args и **kwargs можно использовать вместе в одной функции. Вместо *args и **kwargs можно использовать любые другие названия:
