SORU
19 EYLÜL 2008, Cuma


Senin için Python jeneratör fonksiyonları ne kullanabilirim?

Python öğrenmeye başladım ve jeneratör işlevleri, onlara bir verim bildirimi rastladım. Ne tür işlevleri çözme konusunda çok iyi olan sorunları bilmek istiyorum.

CEVAP
19 EYLÜL 2008, Cuma


Jeneratörler tembel değerlendirme verin. Onları, ya da açıkça '' veya dolaylı olarak herhangi bir işlevi veya bunun dolaşır inşa geçirerek. üzerinden yineleme için bunları kullanın Size aklıma gelen bir jeneratör gibi dönen birden fazla öğe gibi dönerler bir liste, ama yerine dönmeden hepsini aynı anda dönerler onları tek tek ve jeneratör işlevi duraklatılmış kadar gelecek öğedir istedi.

Jeneratörler için iyi hesaplama büyük set sonuçları (özel hesaplamalar içeren döngüler kendilerini nereye bilmiyorum eğer size gerekecek tüm sonuçlar, ya da nerede istemiyorsun tahsis bellek için, tüm bulgular aynı anda. Veya jeneratör kullanır durumlar içinbaşka birjeneratör, tüketir veya başka bir kaynak, ve eğer bu mümkün olduğunca geç olursa daha kolay olur.

Jeneratörler (tam olarak aynısı) başka bir yineleme ile geri değiştirmek için. Bazı durumlarda bir işlev yapacak bir sürü işim ve bazen arayan kişiye geri rapor istiyorum. Geleneksel olarak bunun için bir geri arama işlevini kullanmak istiyorum. İş ve görev için bu geri pas ve periyodik olarak bu geri çağırmak olacaktır. Jeneratör yaklaşım iş işlevi (şimdi bir jeneratör) geri çağırma hakkında hiçbir şey bilmiyor, bir şey rapor etmek istediğinde sadece vermesidir. Arayan kişi, ayrı bir geri yazma ve iş fonksiyonu için geçirmeden yerine, tüm raporlama çalışmalarını '' jeneratör etrafında döngü için.

Örneğin, yazmışsın ki 'dosya arama programı. Kendi bütünlüğü içinde arama yapmak, sonuçları toplamak ve sonra onları bir defada bir ekran. Tüm sonuçları İlk sen gelmeden önce toplanmış olması gerekir, ve tüm sonuçları aynı anda bellekte olabilir. Veya daha fazla bellek verimli ve kullanıcı karşı çok dostça olurdu onları bulmaya çalışırken, sonuçları görüntüleyebilirsiniz. İkinci dosya arama fonksiyonu için sonuç-baskı işlevi geçirerek yapılabilir, ya da sadece bir arama fonksiyon jeneratörü yapma ve sonuç üzerinden yineleme tarafından yapılabilir.

Eğer son iki yaklaşım bir örnek görmek isterseniz, os bakın.yol.() yürüyüş (eski dosya sistemi-yürüyüş geri arama işlevi) ve os.() yürüyüş (yeni yürümeye dosya sistemi jeneratör.) Eğer gerçekten bir listedeki tüm sonuçları toplamak isteseydi elbette, jeneratör yaklaşım önemsiz, büyük-liste yaklaşımı dönüştürmek için:

big_list = list(the_generator)

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LAHWF

    LAHWF

    5 Kasım 2009
  • Soulkiller13 ツ

    Soulkiller13

    30 Mayıs 2013
  • Trevor Eckhart

    Trevor Eckha

    19 Aralık 2009