2013-02-01 11 views

risposta

7

Penso che l'iteratore vuoto sia migliore perché iterare su nulla è più veloce, quindi controllare prima se il valore restituito non è Nessuno e quindi iterare o meno.

for x in function(): 
    do_something() 

value = function() 
if value is not None: 
    for x in value: 
     do_something() 

Basta guardare a questo.

Inoltre, normalmente non si inizializzano gli attributi iter con None, ma con oggetto iter vuoto.

self.list_of_users = [] 

non

self.list_of_users = None 
+0

_ "iterare su niente è più veloce" _ '[citazione necessaria]'. Sì, è _terser, _ ma senza risultati 'timeit', non sono convinto che sia _faster._ –

+0

Puoi scrivere come:' per l'elemento in some_func() o []: pass' o '[fai_qualcosa (elemento) per oggetto in some_func() o []] '. – espeed

+0

Considerare anche il caso in cui è necessario fare qualcosa di diverso quando la funzione non restituisce risultati, si dovrebbe prima controllare la dimensione dell'iteratore. – espeed

5

una pratica generale che mi è stato insegnato da seguire è quello di restituire lo stesso tipo di dati per tutti i valori validi all'interno del dominio di ingresso, se potete. Rende più facile per gli altri usare il tuo codice e la tua documentazione sarà più pulita. Per valori che non rientrano nel dominio di input valido, genera eccezioni.

Un iteratore vuoto, piuttosto che Nessuno, sembra essere una pratica migliore in questo caso. Conosco altri linguaggi di programmazione come restituire null in questi casi, ma non vedo un vantaggio nel farlo nello scenario che hai descritto.

+0

Uno dei motivi per cui sono stato nel campo "non restituire un iteratore vuoto" è perché se devi fare qualcosa per il caso vuoto, dovrai controllare la dimensione dell'iteratore tramite 'if len (risultati): 'e questo potrebbe essere costoso se l'iteratore è grande, mentre' se i risultati sono Nessuno: 'è economico e quindi più flessibile. – espeed

+1

se x è un iteratore, "se x" restituirà False se x è vuoto –

Problemi correlati