Нижеприведенный код работает.
Реализует сохранение значения функции между вызовами.
В общем вопрос по декораторам.
По логике функций словарь должен появляться и умирать при каждом вызове, но это не так.
Заметил что при старте скрипта отработает тело function_cachier если далее по тексту он объявлен декоратором. И словарь успешно сохраняет значения между вызовами.
НО ни в каком namespace я его найти не могу dir()/dir(f2)/dir(function_cachier)
Так вот вопрос. Где хранится содержимое декоратора и какова логика его работы(он загружается куда-то после старта и весит там как живой неймспейс)?
Помогите! Гугл отверг меня, психическое здоровье под угрозой!
def function_cachier(func, *a): cashe = dict() def wraped(n): if n in cashe: return cashe[n] res = func(n) cashe[n] = res return res return wraped def f1(n): print 'f1 called' return n*n @function_cachier def f2(n): print 'f2 called' return n*n*n f2(2) print dir()