Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 26, 2018 16:16:05

JayIvhen
Зарегистрирован: 2018-10-26
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Namespace декоратора

Голова сейчас лопнет.
Нижеприведенный код работает.
Реализует сохранение значения функции между вызовами.

В общем вопрос по декораторам.
По логике функций словарь должен появляться и умирать при каждом вызове, но это не так.
Заметил что при старте скрипта отработает тело 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()

Отредактировано JayIvhen (Окт. 26, 2018 16:20:49)

Офлайн

#2 Окт. 26, 2018 18:39:06

Papa_Svin
Зарегистрирован: 2018-09-17
Сообщения: 138
Репутация: +  1  -
Профиль   Отправить e-mail  

Namespace декоратора

JayIvhen
Вам надо почитать про замыкания

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version