SORU
21 AĞUSTOS 2008, PERŞEMBE


Nasıl sınıf iterable yapmak için?

Nasıl bir Python iterable işlev veya sınıf yaratacak?

CEVAP
23 AĞUSTOS 2008, CUMARTESİ


Temelde iki yöntem sağlar anlamına gelir yineleyici protokolüne uygun olarak python yineleyici nesneleri: __iter__() next(). __iter__ döner yineleyici nesne ve dolaylı olarak döngü başlangıcında denir. next() yöntemi bir sonraki değeri döndürür ve dolaylı olarak her döngü artım denir. next() örtülü olarak yineleme durdurmak için döngü yapıları tarafından yakalanan dönmek için daha fazla değer olduğunda Stopİteration bir özel durum oluşturur.

Burada bir sayaç basit bir örnek:

class Counter:
    def __init__(self, low, high):
        self.current = low
        self.high = high

    def __iter__(self):
        return self

    def next(self): # Python 3: def __next__(self)
        if self.current > self.high:
            raise StopIteration
        else:
            self.current  = 1
            return self.current - 1


for c in Counter(3, 8):
    print c

Bu baskı

3
4
5
6
7
8

Bu daha önceki bir cevap kaplı olarak bir jeneratör kullanarak, yazmak için

def counter(low, high):
    current = low
    while current <= high:
        yield current
        current  = 1

for c in counter(3, 8):
    print c

Yazılı çıktı aynı olacaktır. Kaputun altında, jeneratör nesne yineleyici protokolünü destekler ve bir sınıf Aşağı Yukarı benzer bir Sayaç yok.

David Mertz Madde, Iterators and Simple Generators oldukça iyi bir giriş.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ampisound

    Ampisound

    12 Kasım 2006
  • CNET

    CNET

    5 Mayıs 2006
  • Kamikazeepanda

    Kamikazeepan

    5 ŞUBAT 2006