1 # Copyright 2013 The Chromium Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 def memoize(fn): 6 '''Decorates |fn| to memoize. 7 ''' 8 memory = {} 9 def impl(*args, **optargs): 10 full_args = args + tuple(optargs.iteritems()) 11 if full_args not in memory: 12 memory[full_args] = fn(*args, **optargs) 13 return memory[full_args] 14 return impl 15