Peter Norvig'in web sitesinden aşağıdaki kod snippet'ini aldım; fonksiyon çağrılarındaki hafızayı etkinleştirmek için bir dekoratördür (basit bir dinamik programa bir üstel yinelemeyi değiştirmek için önceki çağrıları önbelleğe alma).Bu python işlevinde neden bir çizgi gerekli? (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
Bu kod düzgün çalışıyor, ancak ikinci satırın neden gerekli olduğunu merak ediyorum. Bu, Python hakkındaki bilgimdeki bir boşluktur, fakat çizgiyi kaldırmak ve basit bir fibonacci işlevi yürütmek hala işe yarıyor gibi görünüyor. Bu, aynı anda birden fazla işlevi belleğe almakla mı ilgili? Fmemo'nun üye değişkeni neden niçin bir tuhaflık tesadüf değildir?
Teşekkürler!
Girinti doğru görünmüyor. İç içe geçmiş bir işlev mi? – MAK
FTFY ........... – katrielalex
BTW bu Python 3.2'de ['functools.lru_cache'] olarak uygulanmıştır (http://docs.python.org/dev/library/functools.html#functools .lru_cache). – katrielalex