2012-01-27 10 views
16

¿Cómo se nombra una función que devuelve un generador (es decir, usa yield foo en lugar de return foo)?Nombre de una función que devuelve un generador

  • Definitivamente no es getFoo() porque no devuelve el valor de Foo.
  • Probablemente no sea foos() porque prefiero tener un prefijo fácil de distinguir.
  • Probablemente no sea exactamente listFoo() porque no devuelve list.
  • Probablemente no sea iterateFoo() porque este prefijo es demasiado largo.

¿Cuál es su solución preferida?

Actualización:

Mientras foos() puede ser una buena solución perfectamente en algunos casos, observar cómo los nombres de métodos tienden a comenzar con un verbo. El verbo transmite la idea de que este es un método, no un campo de datos, y por lo tanto ayuda a la legibilidad. Si es posible, preferiría una solución que facilite distinguir un método de un campo de datos.

+4

¿Quién dijo que un prefijo es algo bueno? ¿Cómo es 'foos' no perfectamente claro? – delnan

+0

Un pensamiento: genFoo() – sgallen

+0

Estoy con @delnan en este caso. 'foos' suena bien. ¿Cómo se nombra un iterable (por ejemplo, una lista)? – zrxq

Respuesta

2

Algunas sugerencias concisas:

getFoos() 
generateFoos() 
yieldFoos() 
allFoos() 

Dado que normalmente no necesita un generador para obtener todos sus foos, es bastante común que la función específica del generador sugiera un nombre más interesante:

getActiveFoos() 
getGreenFoos() 
getFoosMatchingCriteria(someCriteria) 
getFoosOverTheNetworkIfTheDatabaseIsntBeingAJerkface() 
+0

... pero uno de los principios básicos de la ingeniería de software es que la base de datos es ** siempre ** un jerkface ...;) –

+4

Camelcase podría no ser considerado como conforme a PEP8 (hasta donde yo lo veo, PEP8 no es explícito acerca de los generadores). –

0

genFoo()

(... y algunas palabras adicionales garantizar esta solución tiene al menos 30 caracteres)

14

Creo que foo o foos son posibilidades. O bien, para imitar los dictados de Python2 'iteritems, puede usar iterfoo.

4

Aunque es una buena práctica tener nombres útiles que indiquen lo que hacen las cosas, no creo que sea necesario usar Hungarian notation para indicar el tipo de devolución de una función.

El tipo de retorno, probablemente, debe ser documentada en los comentarios o la cadena de documentación, pero yo sugeriría que algo como foos(), getfoos() o get_foos() sería lo mejor para el nombre.

Si quiere que sea obvio que se trata de un generador, sugeriría iterfoos() por su similitud con los métodos dict de Python 2 como itervalues().

Tenga en cuenta que muchas funciones integradas que solían devolver listas ahora son generadores en Python 3 (map(), dict.values() etc.), por lo que no debería sorprender a nadie cuando sus funciones que devuelven una secuencia son generadores incluso si no lo llamó generate_foos() o alguna otra variación.

3

El más precisa sería:

iterateFoo() 
iterate_foo() 
iter_foo() 
iterFoo() 

Usted dice específicamente lo que la función hace mientras está bastante claro por qué lo utilizaría.

Cuestiones relacionadas