Функции с *args принимают произвольное количество позиционных аргументов, а с **kwargs — именованных аргументов. Это позволяет передавать любое количество значений и делать интерфейс функций более гибким. *args упаковывает аргументы в кортеж, а **kwargs — в словарь.
Пример использования ⚙️
def demo_func(*args, **kwargs):print(«Позиционные аргументы:», args)print(«Именованные аргументы:», kwargs)demo_func(1, 2, 3, name="Alice», age=25)# Позиционные аргументы: (1, 2, 3)# Именованные аргументы: {'name': 'Alice', 'age': 25}