SORU
10 Kasım 2008, PAZARTESİ


Bir işlev içinde statik değişkenler Python karşılığı nedir?

Bu C/C kodu deyimsel Python karşılığı nedir?

void foo()
{
    static int counter = 0;
    counter  ;
    printf("counter is %d\n", counter);
}

özellikle, nasıl bir sınıf düzeyinde karşıt olarak işlev düzeyinde statik üyenin uygulamak mı? Ve sınıf bir değişim içine işlevi yerleştirerek bir şey var mı?

CEVAP
10 Kasım 2008, PAZARTESİ


Biraz ters, ama bu çalışması gerekir:

def foo():
    foo.counter  = 1
    print "Counter is %d" % foo.counter
foo.counter = 0

Eğer sayaç başlatma alt yerine üst kod istiyorsan, bir dekoratör oluşturabilirsiniz:

def static_var(varname, value):
    def decorate(func):
        setattr(func, varname, value)
        return func
    return decorate

Sonra bu kodu:

@static_var("counter", 0)
def foo():
    foo.counter  = 1
    print "Counter is %d" % foo.counter

Hala foo. önek kullanmak için, ne yazık ki gerekecek.


EDİT (ony sayesinde): Bu daha güzel görünüyor hatta:

def static_vars(**kwargs):
    def decorate(func):
        for k in kwargs:
            setattr(func, k, kwargs[k])
        return func
    return decorate

@static_vars(counter=0)
def foo():
    foo.counter  = 1
    print "Counter is %d" % foo.counter

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chaoticmoogle

    Chaoticmoogl

    13 ŞUBAT 2006
  • Dumb Stupid Videos

    Dumb Stupid

    26 Kasım 2013
  • HowToBasic

    HowToBasic

    8 Aralık 2011