9

Çoğu fonksiyon isimlendirmek kolaydır. Genel olarak, bir işlev adı ne yaptığını veya ürettiği sonucun türünü temel alır. Bununla birlikte, bir jeneratör işlevi söz konusu olduğunda, sonuç diğer bazı tiplere göre yinelenebilir olabilir. fonksiyon adında türünde bir nesneyi döndürmez beriPython Generator İşlev İsimleri - önek faydalı mı?

def sometype(iterable): 
    for x in iterable: 
     yield some_transformation(x) 

sometype adı, yanıltıcı hissediyor. Bu gerçekten sometype üzerinden yinelenebilir.

iter_sometype veya gen_sometype gibi bir ad, Hungarian Notation gibi bir çok hissedilir. Bununla birlikte, aynı zamanda işlev amacını açıklığa kavuşturuyor gibi görünüyor.

Daha da ileri giderek, bir önekin yararlı olabileceği bazı özel durumlar vardır. Bunlar, bazıları itertools numaralı telefondan edinilebilen tipik örneklerdir. Ancak, çoğu zaman 'u 'a benzeyen, ancak mükemmel bir uyum sağlamayan algoritmik karmaşıklığa sahip bir versiyon yazmamız gerekir.

def reduce_sometype(iterable): 
    summary = sometype() 
    for x in iterable: 
     if some_rule(x): 
      yield summary 
      summary= sometype() 
     summary.update(x) 

def map_sometype(iterable): 
    for x in iterable: 
     yield some_complex_mapping(x) 

def filter_sometype(iterable): 
    for x in iterable: 
     if some_complex_rule(x): 
       yield x 

iter_, map_, reduce_, filter_ önek bir jeneratör işlevinin adını açıklamak yardımcı olur mu? Yoksa sadece görsel karmaşası mı?

Bir önek yardımcı oluyorsa, öneki öneriniz nelerdir?

Alternatif olarak, bir son ek yararlıysa, ne tür öneriniz var?

+0

Sana tür genelleştirilmiş üzerinde .. demek, en basit jeneratör ifadeler olarak doğrudan 2. ve 3. işlevler yazmak düşünüyorum ala '(some_mapping (x) iterable for x)'. Birincisi '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' • '' '' '' '' '' '' '' '•' '' '' '' '' '' '•' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' • '' '' '' '•' '' • '' '' '' '' '' • '' '•' '' • '' '' '. –

+1

@ THC4k: Lütfen daha karmaşık olduklarını hayal edin.Itertools'un içine kolayca sığacak kadar karmaşık. Temel fonksiyonel programlama ilkelerini ihlal ettikleri kadar karmaşık değiller. Örneğin, bir çok ön kurulum çalışmasını bir optimizasyon olarak içerebilirler. –

cevap

6

Python dictsiter* yöntemleri var. Ve lxml ağaçlarının da bir iter yöntemi vardır. Okuma

for node in doc.iter(): 

böylece o yolu izleyerek, tanıdık geliyor, ben

for item in sometypes_iter(): 

Python bir sorted fonksiyonu sağlar, sometypes_iter yüzden analgously yazabilirsiniz sometypes bir jeneratör adlandırma düşünün. , bu kalıbı ardından, fiil-fonksiyonları geçmiş zaman hale getirebileceğini: Bu fonksiyonların yeterince varsa yöntem adları reduce kısalır böylece, o map bir SomeTypes sınıfı yapmak mantıklı olabilir

sometypes_reduced 
sometypes_mapped 
sometypes_filtered 

ve filter. fonksiyonlar kabul veya sometype dışındaki türleri dönmek, sonra tabii o fonksiyonu adından sometype kaldırmak için mantıklı olur, ve bunun yerine türlerinden ziyade ne yaptığını vurgulayan bir isim seçmek jeneralize olabilir Eğer

.