Я получил следующий фрагмент кода с сайта Питера Норвига; это декоратор для включения мемоизации на вызовах функций (кэширование предыдущих вызовов функции для изменения экспоненциальной рекурсии в простую динамическую программу).
def memo(f):
table = {}
def fmemo(*args):
if args not in table:
table[args] = f(*args)
return table[args]
fmemo.memo = table
return fmemo
Код работает нормально, но мне интересно, зачем нужна предпоследняя строка. Это явно пробел в моем знании Python, но если убрать эту строку и запустить простую функцию фибоначчи, то она, кажется, все еще работает. Связано ли это с мемоизацией нескольких функций одновременно? Почему переменная-член fmemo называется memo (если это не неловкое совпадение)?
Спасибо!