Декораторы · 11 из 14
Один раз за запуск
Справочник индексов читается с диска три секунды. Нужен он не всегда, но если понадобился — дальше к нему обращаются весь день, и читать файл заново на каждое обращение отделение позволить себе не может.
Что сделать
Прочитайте справочник индексов один раз за запуск — а дальше отдавайте прочитанное.
Что приходит
rabota— функция без аргументов, долго читает справочник
Что вернуть
Обёртку: первое обращение зовёт rabota и запоминает результат, следующие отдают его, даже None; поле gotovo — было ли выполнено, метод zabyt() — всё заново; имя сохраняется.
Допишите функцию odin_raz в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
vyzovy = []
@odin_raz
def spravochnik():
vyzovy.append(1)
return {"660000": "Красноярск"}
do = spravochnik.gotovo
spravochnik()
spravochnik()
(do, spravochnik(), len(vyzovy), spravochnik.gotovo)
(False, {'660000': 'Красноярск'}, 1, True)
Функция принимает другую функцию, вызываемую без аргументов, и возвращает обёртку. Первое обращение к обёртке вызывает исходную функцию и запоминает результат. Все следующие отдают запомненное, не вызывая исходную функцию вовсе — даже если она вернула None. Поле «gotovo» показывает, было ли уже выполнено (в начале False). Метод «zabyt()» возвращает обёртку в начальное состояние: следующее обращение снова вызовет исходную функцию. Имя исходной функции сохраняется.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.