**args**, когда неуверены, сколько аргументов будет передано функции, или если хотим передать сохраненный список или кортеж аргументов функции.  **kwargs** используется, когда мы не знаем, сколько аргументов ключевых слов будет передано, а также он может быть использован для передачи значений словаря в качестве аргументов ключевых слов. Идентификаторы args и kwargs необязательны, вы можете изменить их на другие, типа *другой **пример, но лучше использовать имя по умолчанию. ```python # Пример *args def sample( *args) : print(args) sample( 'time', 1, True) # Пример **kwargs def sample(**kwargs) : print(kwargs) sample(a = 'time', b = 1) ``` ==================================== В Python можно распаковывать коллекции в аргументы или структуры — это мощно. ```python #_***args и kwargs — собирают аргументы:_ def f(*args, **kwargs):     print(args, kwargs) f(1, 2, x=10)  # (1, 2), {'x': 10} # 👍 _* и ** — распаковывают:_ nums = [1, 2, 3] print(*nums)  # 1 2 3 params = {"sep": " | "} print(1, 2, 3, **params)  # 1 | 2 | 3 #_Распаковка в переменные:_ a, *middle, b = [1, 2, 3, 4, 5] print(middle)  # [2, 3, 4] ``` **Где применять: передача параметров, адаптация API, читаемый код**