Я получил следующий фрагмент кода с сайта Peter Norvig; это декоратор для включения memoization в вызовы функций (кэширование предыдущих вызовов функции для изменения экспоненциальной рекурсии в простую динамическую программу).
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 (если предположить, что это не неудобное совпадение)?
Спасибо!