Python/Memoize: 実装をカスタマイズできるMemoizeデコレータ

Dictionary-like なオブジェクトを引数として受け取り,それを使ってメモ化を行うデコレータ(decorator)です.メモ化対象の関数・メソッドの特性に応じて,in memoryでキャッシュを行ったり,ディスク上のデータを読み書きしたりする,といったキャッシングの方法を外部から隠蔽できます.

使用例

from memoizer import memoize, pickle_cache
linkPattern=re.compile(r'^.+?<a href="http://web.archive.org/web/([0-9]{14})/.+$')

@memoize(pickle_cache('urlbirthday', expire=sys.maxint))
def urlbirthday(url, unavailable=None):
  try:
    for line in urllib2.urlopen("http://web.archive.org/web/*/"+url):
      m = linkPattern.match(line)
      if m:
        datestr=m.group(1)
        return datetime.datetime(*map(int,map(lambda be: datestr[be[0]:be[1]], dateIndices))).date()
  except urllib2.HTTPError, e:
    pass
  return unavailable

説明

応用例

ダウンロード


Yusuke Yanbe