SORU
28 NİSAN 2011, PERŞEMBE


Python ____ özel yöntem pratik örnek çağrı

Bir sınıfta __call__ yöntemi bir sınıf örneği çağrıldığında tetiklenir biliyorum. Ancak, hiçbir fikrim yok ne zaman kullanabilirim bu özel yöntem, çünkü kişi sadece yeni bir yöntem ve gerçekleştirmek aynı işlem yapılır __call__ yöntem ve yerine çağıran örneği diyebilirsin yöntemi.

Gerçekten, eğer birisi bana bu özel yöntem pratik kullanım verirse çok memnun olurum.

CEVAP
28 NİSAN 2011, PERŞEMBE


Bu örnek memoization, onları daha sonra onları yeniden yerine bakabilirsiniz yani bir tablodaki değerleri (bu durumda sözlük) depolama temel olarak kullanır.

Burada kullandığımız basit bir sınıf ile bir __call__ yöntem için hesaplanması faktöriyel (callable object) yerine bir faktöriyel fonksiyonu içeren bir statik değişken olarak bu mümkün değil Python).

class Factorial:
    def __init__(self):
        self.cache = {}
    def __call__(self, n):
        if n not in self.cache:
            if n == 0:
                self.cache[n] = 1
            else:
                self.cache[n] = n * self.__call__(n-1)
        return self.cache[n]

fact = Factorial()

Şimdi çağrılabilir olan fact bir nesne, tıpkı diğer işlevi gibi. Örneğin

for i in xrange(10):                                                             
    print("{}! = {}".format(i, fact(i)))

# output
0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880

Veayrıca durum bilgisi.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BlackmillMusic

    BlackmillMus

    3 Kasım 2010
  • Friday NightFort

    Friday Night

    15 EYLÜL 2011
  • mist64

    mist64

    30 Mayıs 2006