Frage

Die meisten Funktionen sind leicht zu nennen. Im Allgemeinen wird ein Funktionsname basiert auf, was sie tut oder die Art des Ergebnisses es produziert.

Im Fall einer Generatorfunktion, jedoch könnte das Ergebnis ein iterable über einen anderen Typen sein.

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

Der sometype Name fühlt sich irreführend, da die Funktion nicht zurück, ein Objekt des genannten Typs. Es ist wirklich eine iterable über sometype.

Ein Name wie iter_sometype oder gen_sometype fühlt sich ein bisschen zu sehr wie ungarische Notation . Allerdings scheint es auch die Absicht der Funktion zu klären.

Weiter zu gehen, gibt es eine Reihe von mehr spezialisierten Fällen, in denen ein Präfix hilfreich sein könnte. Dies sind typische Beispiele, von denen einige sind in itertools . Allerdings müssen wir oft eine Version schreiben, dass die einige algorithmische Komplexität bekommt, die es macht ähnlich wie itertools, aber nicht eine perfekte Passform.

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

Ist die iter_, map_, reduce_, filter_ Präfix Hilfe den Namen einer Generatorfunktion klären? Oder ist es nur visuelle Unordnung?

Wenn ein Präfix hilfreich ist, welches Präfix Vorschläge haben Sie?

Wenn alternativ ein Suffix hilfreich ist, welche Suffix Vorschläge haben Sie?

War es hilfreich?

Lösung

Python dicts haben iter* Methoden. Und lxml Bäume auch eine iter Methode haben. Lesen

for node in doc.iter():

scheint vertraut, so Im Anschluss an dieses Muster, würde ich den einen Generator von sometypes sometypes_iter Benennung betrachten so dass ich analgously schreiben konnte,

for item in sometypes_iter():

Python bietet eine sorted Funktion. Nach diesem Muster könnte ich die Verb-Funktionen Vergangenheitsform machen:

sometypes_reduced
sometypes_mapped
sometypes_filtered

Wenn Sie genug von diesen Funktionen haben, könnte es sinnvoll sein, eine SomeTypes Klasse zu machen, damit die Methodennamen zu reduce, map verkürzt werden können und filter.

Wenn können die Funktionen verallgemeinern zu akzeptieren oder Rückgabetypen anders als sometype, dann wäre es natürlich sinnvoll, entfernen sometype aus dem Funktionsnamen zu machen, und stattdessen einen Namen wählen, das betont, was es tut und nicht den Typen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top