Check

Распаковка аргументов и flexible API

Python Senior Яндекс
Как вы используете `*args` и `**kwargs` в публичном API так, чтобы не ломать обратную совместимость при добавлении новых параметров? Приведите пример хорошего и плохого дизайна.
Ответы
Гибкие сигнатуры
Плохой дизайн — всё свалить в `*args, **kwargs` без явных параметров: теряется читаемость, автодополнение и статическая проверка. Хороший подход: - чётко описать обязательные параметры; - использовать `*` для отделения позиционных от именованных; - новое поведение добавлять через именованные аргументы с значениями по умолчанию. Пример: ```python def fetch(url: str, *, timeout: float = 5.0, retries: int = 3, **kwargs): ... ``` Старый код, не знающий о новых параметрах, продолжит работать. `**kwargs` можно использовать для прокидывания параметров ниже по стеку, но внутри лучше явно извлечь нужные ключи.