Pregunta

La mayoría de las funciones son fáciles de nombre. En general, un nombre de función se basa en lo que hace o el tipo de resultado que produce.

En el caso de una función de generador, sin embargo, el resultado podría ser un iterable más de algún otro tipo.

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

El nombre sometype siente engañosa, ya que la función no devuelve un objeto del tipo llamado. Es realmente un sometype sobre iterable.

Un nombre como iter_sometype o gen_sometype se siente un poco demasiado como húngaro notación . Sin embargo, también parece aclarar la intención de la función.

Yendo más lejos, hay una serie de casos más especializados, en los que un prefijo podría ser útil. Estos son ejemplos típicos, algunos de los cuales están disponibles en itertools . Sin embargo, a menudo tenemos que escribir una versión que tiene algo de complejidad algorítmica que lo hace similar a itertools, pero no un ajuste perfecto.

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

¿El iter_, map_, reduce_, filter_ ayuda a clarificar el prefijo del nombre de una función de generador? ¿O es simplemente el desorden visual?

Si un prefijo es útil, ¿qué sugerencias prefijo tiene usted?

Por otra parte, si un sufijo es útil, ¿qué sugerencias sufijo tiene usted?

¿Fue útil?

Solución

Python dicts tienen métodos iter*. Y los árboles LXML también tienen un método iter. La lectura

for node in doc.iter():

parece familiar, por lo siguiendo ese patrón, me gustaría considerar nombrar el generador de sometypes sometypes_iter por lo que podría escribir analgously,

for item in sometypes_iter():

Python proporciona una función de sorted. Siguiendo ese patrón, podría hacer las funciones verbales en tiempo pasado:

sometypes_reduced
sometypes_mapped
sometypes_filtered

Si usted tiene suficiente de estas funciones, podría tener sentido para hacer una clase SomeTypes por lo que los nombres de los métodos podría reducirse a reduce, map y filter.

Si las funciones se pueden generalizar a aceptar o tipos de recurrencia distintos sometype, entonces por supuesto que tendría sentido sometype de eliminación del nombre de la función, y en lugar de elegir un nombre que hace hincapié en lo que hace en vez de los tipos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top