Зачем нужна строка в этой функции python? (memoized recursion)

Я получил следующий фрагмент кода с сайта Питера Норвига; это декоратор для включения мемоизации на вызовах функций (кэширование предыдущих вызовов функции для изменения экспоненциальной рекурсии в простую динамическую программу).

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 (если это не неловкое совпадение)?

Спасибо!

12
задан Katriel 17 December 2011 в 02:17
поделиться