Декораторы · 13 из 14
Со скобками и без
Пометку к записям в журнале завели общую, а потом понадобилось иногда ставить свою. Переписывать полтора десятка мест, где декоратор уже стоит без скобок, никто не захотел — значит, он должен работать в обоих видах.
Что сделать
Сделайте декоратор пометки, который работает и со скобками, и без, — чтобы не переписывать полтора десятка мест.
Что приходит
rabota— функция, когда декоратор стоит без скобок:@otmetitpometka— своя пометка, только по имени:@otmetit(pometka="срочно"); без неё — «обычная»
Что вернуть
Обёртку, которая отдаёт строку функции с пометкой спереди: "[срочно] посылка принята", без пометки — "[обычная] …"; имя сохраняется.
Допишите функцию otmetit в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
@otmetit
def zapis(chto):
return chto
@otmetit(pometka="срочно")
def srochnaya(chto):
return chto
(zapis('посылка принята'), srochnaya('посылка принята'))
('[обычная] посылка принята', '[срочно] посылка принята')
Написать декоратор «otmetit», который применяется двумя способами.
Без скобок — «@otmetit» — пометка «обычная».
Со скобками — «@otmetit(pometka="срочно")» — пометка своя.
В обоих случаях обёртка принимает любые аргументы, вызывает исходную функцию и возвращает её строку с приписанной спереди пометкой в квадратных скобках и пробелом: «[срочно] текст». Имя исходной функции сохраняется. Пометка передаётся только по имени: «@otmetit("срочно")» — не наш случай, поддерживать такую запись не нужно.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.