Pythonは、 s - デコレータ。基本的に、デコレータは、関数のソースコードを変更せずに、追加の機能を提供するために別の関数をラップする関数です。あなたはそれを持ってたら
import json
def persist_to_file(file_name):
def decorator(original_func):
try:
cache = json.load(open(file_name, 'r'))
except (IOError, ValueError):
cache = {}
def new_func(param):
if param not in cache:
cache[param] = original_func(param)
json.dump(cache, open(file_name, 'w'))
return cache[param]
return new_func
return decorator
、@ -syntaxを使用して機能を「飾る」とあなたは準備が整いました:あなたのデコレータは次のように書くことができます。
@persist_to_file('cache.dat')
def html_of_url(url):
your function code...
このデコレータが意図的に簡略化され、ソース関数が受け入れまたはJSONシリアライズできないデータを返すとき、例えば、すべての状況で動作しない可能性があることに注意してください。
デコレータの
より:How to make a chain of function decorators?
そして、ここでは、デコレータが終了時に、一度だけのキャッシュを保存させる方法は次のとおりです。
import json, atexit
def persist_to_file(file_name):
try:
cache = json.load(open(file_name, 'r'))
except (IOError, ValueError):
cache = {}
atexit.register(lambda: json.dump(cache, open(file_name, 'w')))
def decorator(func):
def new_func(param):
if param not in cache:
cache[param] = func(param)
return cache[param]
return new_func
return decorator
キャッシュディクテリストをpickle(またはjsonを使用)してください。 – root
ありがとうが、私はpython初心者(2日目)です。私はあなたが何を意味するか少しだけ考えているわけではありません。 – seguso
初心者は、Googleで「pickle python」を検索して、何か質問があれば私達に戻ってきます。 –