2 Mayıs 2009, CUMARTESİ
Bir dekoratör sadece dönüş değerleri önbellek işlevi var mı?
Aşağıdakileri göz önünde bulundurun:
@property
def name(self):
if not hasattr(self, '_name'):
# expensive calculation
self._name = 1 1
return self._name
Ben yeniyim, ama önbellekleme bir dekoratör içine çarpanlarına olabilir bence. Sadece bunun gibi bir tane bul;) bilmiyordum
PS gerçek hesaplama değişken değerlerine bağlı değildir
CEVAP
12 Mart 2012, PAZARTESİ
Python 3.2 bir yerleşik dekoratör var başlangıç:
@functools.lru_cache(maxsize=100, typed=False)
Dekoratör en son maxsize aramaları kaydeder bir memoizing çağrı ile bir işlev kaydırmak. O bağlı işlev/pahalı ya ben düzenli olarak aynı argümanla çağrıldığında zamandan tasarruf edebilirsiniz.
Bilgisayar için LRU önbellek örneği Fibonacci numbers:
@lru_cache(maxsize=None)
def fib(n):
if n < 2:
return n
return fib(n-1) fib(n-2)
>>> print([fib(n) for n in range(16)])
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]
>>> print(fib.cache_info())
CacheInfo(hits=28, misses=16, maxsize=None, currsize=16)
Python 2 ile sıkışmış.x, burada diğer uyumlu memoization kütüphaneleri listesi:
functools32
| PyPI | Source coderepoze.lru
| PyPI | Source codepylru
| PyPI | Source codebackports.functools_lru_cache
| PyPI | Source code
Bunu Paylaş:
Bir fonksiyon, sadece bir "dönüş" ifad...
Java Jenerik: Jenerik türü dönüş türü ...
Sipariş LinkedHashMap bir nesne anahta...
MySQL sadece not null değerleri SEÇİN...
Değerleri kimliğini almak için sadece ...