Вы пишете обертку над функцией render(template, **options), которая принимает много опций. Вам нужно пробрасывать дополнительные опции дальше, но при этом оставить обязательный параметр явным. Какой вариант лучше?
A
def render_page(template, options): return render(template, options)B
def render_page(template, *options): return render(template, *options)C
def render_page(*args, **kwargs): return render(*args, **kwargs)D
def 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. Какой вызов не выполнится из-за позиции аргументов (позиционный после именованного)?Ещё вопросы по теме «Функции и аргументы»
- Есть функция `def add(x, y): return x + y`. Что вернет вызов `add(2, 3)`?
- Дана функция `def f(a, b, c): return a * 100 + b * 10 + c`. Что вернет вызов `f(1, c=3, b=2)`?
- Есть функция `def power(x, exp=2): return x ** exp`. Что вернет вызов `power(3)`?
- Дана функция `def total(*args): return sum(args)`. Что вернет вызов `total(1, 2, 3)`?
- Дан код: `x = 10; def inc(): return x + 1`. Что вернёт вызов `inc()`?
- Все вопросы по «Функции и аргументы» →