Порой нельзя предсказать, сколько аргументов получит функция. Для их обработки используются специальные конструкции *args и **kwargs.
На самом деле названия переменных – args, kwargs – это лишь некоторое соглашение.
В примере функция принимает обязательный аргумент
val, а остальных аргументов она как бы и не ожидает. В таком случае *args упаковывает все не именованные аргументы в кортеж, а **kwargs – все именованные в словарь.Конструкция получается достаточно полезной, если мы не знаем, кем и в каких целях будет использоваться наша функция. Таким образом, мы можем запихнуть в аргументы практически что угодно.
