Вы пишете обёртку над функцией 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) с явным template
Правильный ответ. В обёртках обязательные параметры делают явными, а остальное пробрасывают через **kwargs.

Разбор

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

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

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