Вы пишете обертку над функцией render(template, **options), которая принимает много опций. Вам нужно пробрасывать дополнительные опции дальше, но при этом оставить обязательный параметр явным. Какой вариант лучше?

Adef render_page(template, options): return render(template, options)
Bdef render_page(template, *options): return render(template, *options)
Cdef render_page(*args, **kwargs): return render(*args, **kwargs)
Ddef render_page(template, **options): return render(template, **options)
Правильный ответ. В обертках часто делают обязательные параметры явными, а остальное пробрасывают через **kwargs.

Разбор

Вариант def render_page(template, **options): return render(template, **options) сохраняет читаемость: сразу видно обязательный template. При этом **options позволяет пробросить любые дополнительные именованные параметры дальше. Полностью «универсальный» *args, **kwargs иногда нужен, но ухудшает понимание интерфейса, если у функции есть очевидные обязательные аргументы.

Проверь себя · 1/3разбор после ответа
Есть функция def f(a, b, c): return a + b + c. Какой вызов не выполнится из-за позиции аргументов (позиционный после именованного)?
Тренировать Python в Telegram

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