Вы проектируете функцию для аналитического трекинга: обязательны event_name, user_id, timestamp, а дополнительные поля бывают редко и непредсказуемы. Какой дизайн наиболее читаемый и удобный?

Adef track_event(**kwargs): ...
Bdef track_event(event_name, *args, **kwargs): ...
Cdef track_event(): ...
Ddef track_event(event_name, user_id, timestamp, **kwargs): ...
Правильный ответ. Ключевые обязательные параметры лучше делать явными, а «опциональные метаданные» — через **kwargs.

Разбор

Если обязательные параметры важны для понимания кода, их стоит прописать явно в сигнатуре: так легче читать, есть автодополнение, меньше ошибок при вызове. При этом дополнительные редкие поля удобно принимать через **kwargs как словарь метаданных. Полностью «все через **kwargs» ухудшает читаемость и усложняет контроль входных данных.

Проверь себя · 1/3разбор после ответа
Дана функция def add(a, b, c): return a + b + c и список nums = [1, 2, 3]. Что вернет вызов add(*nums)?
Тренировать Python в Telegram

Ещё вопросы по теме «Функции и аргументы»