SORU
5 Mayıs 2010, ÇARŞAMBA


Arasındaki fark Python'In Jeneratörler ve Kullanımına

Kullanımına ve jeneratörler arasındaki fark nedir? Her durumda kullandığınız için bazı örnekler yararlı olacaktır.

CEVAP
5 Mayıs 2010, ÇARŞAMBA


Daha genel bir kavramdır iterator: next yöntem (__next__ Python 3) ve return self yok __iter__ bir yöntem olan herhangi bir nesne.

Her jeneratör bir yineleyici, ama tersi değil. Bir jeneratör inşa çağırarak bir fonksiyonu olan bir ya da daha fazla yield deyimler (yield tablolar, Python 2.5 ve daha önceki) ve bir nesne karşılayan bir önceki paragrafta tanımı iterator.

İsteyebilirsiniz kullanın özel bir yineleyici, yerine bir jeneratör, ihtiyacın olduğunda bir sınıf ile biraz karmaşık devlet-idare davranış, ya da maruz istediğiniz diğer yöntemlerin yanında next (__iter__ __init__). Çoğu zaman, bir jeneratör (bazen, yeterince basit ihtiyaçlarını, jeneratörifade) yeterli ve basit devlet bakım (makul sınırlar içinde) temelde "sizin için" kare uzaklaştırmayı ve devam etti. yapıldığından kodu.

Örneğin, bir jeneratör gibi

def squares(start, stop):
    for i in xrange(start, stop):
        yield i * i

generator = squares(a, b)

veya eşdeğer jeneratör ifadesi (genexp)

generator = (i*i for i in xrange(a, b))

özel bir yineleyici olarak inşa etmek için daha fazla kod alır:

class Squares(object):
    def __init__(self, start, stop):
       self.start = start
       self.stop = stop
    def __iter__(self): return self
    def next(self):
       if self.start >= self.stop:
           raise StopIteration
       current = self.start * self.start
       self.start  = 1
       return current

iterator = Squares(a, b)

Ama, tabii ki, kolayca ekstra yöntemler sunabilir Squares sınıf ile, yani

    def current(self):
       return self.start

uygulamanızda bu tür ek işlevsellik için gerçek bir ihtiyaç varsa.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • H3Ctic (old channel)

    H3Ctic (old

    23 Mart 2011
  • MVLV28

    MVLV28

    17 Mart 2008
  • Philip DeFranco

    Philip DeFra

    16 EYLÜL 2006