Neden't Python statik değişkenler var? | Netgez.com
SORU
26 ÅžUBAT 2009, PERÅžEMBE


Neden't Python statik deÄŸiÅŸkenler var?

questions asking how to simulate static variables in python var.

Ayrıca, web üzerinde bir çok farklı çözümler statik değişkenleri oluşturmak için bulabilirsiniz. (Gerçi ben henüz böyle bir şey görmedim.)

Neden Python yöntemleri statik değişkenleri desteklemiyor mu? Bu unpythonic kabul edilir ya da bir şey Python sözdizimi ile ilgisi var mı?

Düzenleme:

Özellikle sordumnedentasarım kararı ve statik değişkenler simüle etmek için açıklama kaçınmak istediğim için herhangi bir kod örneği sağlanan değil.

CEVAP
27 ÅžUBAT 2009, Cuma


Gerçekten bir jeneratör kullanarak olmalıdır zaman gerçekten bir sınıf kullanarak olmalıdır zaman. bu ihmal statik değişkenler sadece iki durumda yararlı arkasındaki fikir:

Eğer bir fonksiyon için durum bilgisi bilgi eklemek istiyorsan, ihtiyacın olan bir sınıftır. Basit basit bir sınıf, belki de, ama yine de sınıfı:

def foo(bar):
    static my_bar # doesn't work

    if not my_bar:
        my_bar = bar

    do_stuff(my_bar)

foo(bar)
foo()

# -- becomes ->

class Foo(object):
    def __init__(self, bar):
        self.bar = bar

    def __call__(self):
        do_stuff(self.bar)

foo = Foo(bar)
foo()
foo()

Eğer işlevin davranışı deniyor her zaman değiştirmek istiyorsan, ihtiyacın olan bir jeneratör

def foo(bar):
    static my_bar # doesn't work

    if not my_bar:
        my_bar = bar

    my_bar = my_bar * 3 % 5

    return my_bar

foo(bar)
foo()

# -- becomes ->

def foogen(bar):
    my_bar = bar

    while True:
        my_bar = my_bar * 3 % 5
        yield my_bar

foo = foogen(bar)
foo.next()
foo.next()

Tabii ki, statik değişkenlerküçük görevler için büyük yapılar güçlük uğraşmak istemiyorum hızlı-ve-kirli senaryo için faydalı. Ama yok, gerçekten global — ama kludgy görünebilir, ama bu küçük bir sorun, bir komut daha fazla bir şey gerekmez:

def foo():
    global bar
    do_stuff(bar)

foo()
foo()

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Electro Posé

    Electro PosÃ

    21 ÅžUBAT 2013
  • SelmerSaxMan

    SelmerSaxMan

    24 HAZİRAN 2006
  • Tracy Hairston

    Tracy Hairst

    22 Mayıs 2009