Domanda

La maggior parte delle funzioni sono facili da nome. Generalmente, un nome di funzione si basa su ciò che fa o il tipo di risultato che produce.

Nel caso di una funzione generatore, tuttavia, il risultato potrebbe essere un iterabile su qualche altro tipo.

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

Il nome sometype sente fuorviante, dal momento che la funzione non restituisce un oggetto del tipo di nome. E 'davvero un sometype sopra iterabile.

Un nome come iter_sometype o gen_sometype si sente un po 'troppo come ungherese Notazione . Tuttavia, sembra anche a chiarire l'intento della funzione.

Andando oltre, ci sono un certo numero di casi più specializzati, in cui un prefisso potrebbe essere utile. Questi sono esempi tipici, alcuni dei quali sono disponibili in itertools . Tuttavia, spesso siamo costretti a scrivere una versione che ha ottenuto una certa complessità algoritmica che lo rende simile a itertools, ma non una perfetta vestibilità.

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

Il il iter_, map_, reduce_, filter_ aiuto prefisso chiarire il nome di una funzione generatore? O è solo l'ingombro visivo?

Se un prefisso è utile, quale prefisso suggerimenti avete?

In alternativa, se un suffisso è utile, ciò che suffisso suggerimenti avete?

È stato utile?

Soluzione

Python dicts hanno metodi iter*. E gli alberi lxml hanno anche un metodo iter. Lettura

for node in doc.iter():

sembra familiare, in modo da successivo modello, mi piacerebbe prendere in considerazione la denominazione un generatore di sometypes sometypes_iter in modo che ho potuto scrivere analgously,

for item in sometypes_iter():

Python fornisce una funzione sorted. A seguito di quel modello, potrei fare il verbo-funzioni passato:

sometypes_reduced
sometypes_mapped
sometypes_filtered

Se avete abbastanza di queste funzioni, potrebbe avere senso per fare una classe SomeTypes in modo che i nomi dei metodi potrebbero essere ridotti a reduce, map e filter.

Se le funzioni possono essere generalizzati ad accettare o tipi restituiti diversi sometype, poi, naturalmente, avrebbe senso per rimuovere sometype dal nome della funzione, e invece scegliere un nome che sottolinea ciò che fa, piuttosto che i tipi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top