# Copyright 2013 The Chromium Authors. All rights reserved. | |
# Use of this source code is governed by a BSD-style license that can be | |
# found in the LICENSE file. | |
def memoize(fn): | |
'''Decorates |fn| to memoize. | |
''' | |
memory = {} | |
def impl(*args, **optargs): | |
full_args = args + tuple(optargs.iteritems()) | |
if full_args not in memory: | |
memory[full_args] = fn(*args, **optargs) | |
return memory[full_args] | |
return impl |