SORU
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:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BruBearBaby

    BruBearBaby

    25 Ocak 2011
  • FPSRussia

    FPSRussia

    19 NİSAN 2010
  • MagmaRhino

    MagmaRhino

    16 Temmuz 2011