SORU
3 Temmuz 2009, Cuma


Neden hayır önce(iterable) yerleşik işlevi Python?

Merak ediyorum eğer bir nedeni var yok first(iterable) Python built-in fonksiyonları, biraz benzer any(iterable) all(iterable) (olabilir sıkışmış bir stdlib modülü bir yerde, ama anlamıyorum itertools). first gereksiz (ve potansiyel olarak sonsuz sayıda) işlem önlenebilir böylece kısa devre jeneratör bir değerlendirme gerçekleştirmek istiyorsunuz; yani

def identity(item):
    return item

def first(iterable, predicate=identity):
    for item in iterable:
        if predicate(item):
            return item
    raise ValueError('No satisfactory value found')

Böyle şeyler gibi ifade edebilirsiniz:

denominators = (2, 3, 4, 5)
lcd = first(i for i in itertools.count(1)
    if all(i % denominators == 0 for denominator in denominators))

Açıkça jeneratör sonlandırmak olmadığından bu durumda list(generator)[0] yapamaz.

Ya eğer karşı maç için yukarıdaki diyagram bir grup varsa, bu yararlı hepsi groupdict aynı arayüze sahip olduğunda):

match = first(regex.match(big_text) for regex in regexes)

list(generator)[0] kaçınarak gereksiz işleme tasarrufu ve olumlu bir maç kısa devre yapıyor.

CEVAP
3 Temmuz 2009, Cuma


Eğer bir iterable varsa, sadece next kendi yöntemini çağırabilirsiniz. Gibi bir şey

In [3]: (5*x for x in xrange(2,4)).next()
Out[3]: 10

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AceHoodVEVO

    AceHoodVEVO

    12 Mayıs 2009
  • CasinoRoyaleMovie's channel

    CasinoRoyale

    1 AĞUSTOS 2006
  • Shanice Caruthers

    Shanice Caru

    27 EKİM 2011