2012-01-27 17 views
16

Come si chiama una funzione che restituisce un generatore (ovvero, utilizza yield foo anziché return foo)?Nome di una funzione che restituisce un generatore

  • Non è sicuramente getFoo() perché non restituisce un valore di Foo.
  • Probabilmente non è foos() perché preferirei avere un prefisso facile da distinguere.
  • Probabilmente non è esattamente listFoo() perché non restituisce uno list.
  • Probabilmente non è iterateFoo() perché questo prefisso è troppo lungo.

Qual è la soluzione che preferisci?

Aggiornamento:

Mentre foos() può essere una buona soluzione perfettamente in alcuni casi, notare come i nomi dei metodi tendono a iniziare con un verbo. Il verbo trasmette l'idea che questo è un metodo, non un campo dati, e quindi aiuta la leggibilità. Se possibile, preferirei una soluzione che renda facile distinguere un metodo da un campo dati.

+4

Chi ha detto che un prefisso è una buona cosa? In che modo 'foos' non è perfettamente chiaro? – delnan

+0

Un pensiero: genFoo() – sgallen

+0

Sono con @delnan su questo. 'foos' sembra giusto. Come si nomina un iterabile (ad esempio un elenco)? – zrxq

risposta

2

Alcuni suggerimenti concisi:

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

Dal momento che normalmente non è necessario un generatore per ottenere solo tutti i tuoi foos, è abbastanza comune per la funzione specifica del generatore di suggerire un nome più interessante:

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

... ma uno dei principi fondamentali dell'ingegneria del software è che il database è ** sempre ** un jerkface ...;) –

+4

Camelcase potrebbe non essere considerato conforme a PEP8 (per quanto vedo, PEP8 non è esplicito sui generatori). –

0

genFoo()

(... e qualche parola in più garantire questa soluzione ha almeno 30 caratteri)

14

Penso che foo o foos siano possibilità. Oppure, per imitare Python2 dicts 'iteritems, è possibile utilizzare iterfoo.

4

Sebbene sia opportuno disporre di nomi utili che indicano cosa fanno le cose, non penso sia assolutamente necessario utilizzare Hungarian notation per indicare il tipo di ritorno di una funzione.

Il tipo di ritorno dovrebbe probabilmente essere documentata nei commenti o docstring, ma vorrei suggerire che qualcosa di simile foos(), getfoos(), o get_foos() sarebbe meglio per il nome.

Se non vuoi che sia evidente che si tratta di un generatore, vorrei suggerire iterfoos() per la sua somiglianza con i metodi dict di Python 2 come itervalues().

Tenete a mente che molte funzioni built-in che utilizza per restituire le liste sono ora generatori in Python 3 (map(), dict.values() ecc), in modo che non dovrebbe sorprendere nessuno quando le funzioni che restituiscono una sequenza sono generatori, anche se si non l'ho chiamato generate_foos() o qualche altra variazione.

3

La più accurata sarebbe:

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

Lei dice specificamente che cosa fa la funzione, pur essendo abbastanza chiaro il motivo per cui si dovrebbe utilizzare.

Problemi correlati