Molte funzioni sono facili da nominare. Generalmente, il nome di una funzione si basa su ciò che fa o sul tipo di risultato che produce.Nome funzione generatore Python - è un prefisso utile?
Nel caso di una funzione di generatore, tuttavia, il risultato potrebbe essere iterabile su un 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. È davvero un iterable su sometype
.
Un nome come iter_sometype
o gen_sometype
si sente un po 'troppo come Hungarian Notation. Tuttavia, sembra anche chiarire l'intento della funzione.
Proseguendo ulteriormente, ci sono un 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 dobbiamo scrivere una versione che ha una certa complessità algoritmica che lo rende simile a itertools
, ma non perfetto.
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
Condivide la iter_
, map_
, reduce_
, filter_
prefisso aiutare a chiarire il nome di una funzione di generatore? O è solo un disordine visivo?
Se un prefisso è utile, quali suggerimenti del prefisso avete?
In alternativa, se un suffisso è utile, quali sono i suggerimenti del suffisso?
Penso che tu sia un po 'troppo generalizzato .. Voglio dire, la maggior parte scriverebbe semplicemente le tue 2a e 3a funzione direttamente come espressioni del generatore ala '(some_mapping (x) per x in iterable)'. Il primo non "riduce" nulla, è più simile a una mappatura dato che c'è un nuovo 'sometype' per ogni' x'. –
@ THC4k: immagina che siano più complessi.Troppo complesso per adattarsi facilmente all '"itertools". Non così complesso da violare i principi di programmazione funzionale di base. Ad esempio, potrebbero comportare un sacco di lavoro di installazione preliminare come ottimizzazione. –