Generador de Python nombres de función - es útil un prefijo? [cerrado]
-
26-09-2019 - |
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?
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.