Le opinioni sembrano essere mescolate su questo - c'è un "modo giusto" pitonico per fare questo?È cattivo stile Python restituire iteratori vuoti anziché None?
risposta
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
_ "iterare su niente è più veloce" _ '[citazione necessaria]'. Sì, è _terser, _ ma senza risultati 'timeit', non sono convinto che sia _faster._ –
Puoi scrivere come:' per l'elemento in some_func() o []: pass' o '[fai_qualcosa (elemento) per oggetto in some_func() o []] '. – espeed
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
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.
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
se x è un iteratore, "se x" restituirà False se x è vuoto –
- 1. File aperto: questo cattivo stile Python?
- 2. Gli iteratori in stile Python in C
- 3. Come posso ottenere un generatore Python per restituire None anziché StopIteration?
- 4. Perché MySQL esegue restituire None?
- 5. Come restituire None in Scala
- 6. Scrapy Spider restituisce None anziché Item
- 7. Va bene restituire None da __new__?
- 8. Python + JSON, cosa è successo a None?
- 9. hasNext in iteratori Python?
- 10. funzione Python restituisce None
- 11. iteratori di Python: come assegnare dinamicamente self.next all'interno di una nuova classe di stile?
- 12. NSUserNotificationCenter.defaultUserNotificationCenter() restituisce None in python
- 13. Perché il seq è cattivo?
- 14. Perché restituire NotImplemented anziché sollevare NotImplementedError
- 15. Get xpath() per restituire i valori vuoti
- 16. String divisione non restituire i risultati vuoti
- 17. È tutto superiore a None?
- 18. Cosa fa questa funzione? (Iteratori di Python)
- 19. CKEditor aggiunge paragrafi vuoti quando si applica uno stile
- 20. Jquery Funzione stile ordinabile con punti vuoti
- 21. rimozione di elementi vuoti finali in Python
- 22. I commenti C++ sono considerati di cattivo stile in C?
- 23. Gli inizializzatori di istanza sono considerati in cattivo stile?
- 24. RJS è cattivo e perché?
- 25. Restituire copie di dati privati anziché riferimenti
- 26. Come concatenare le ricerche di attributi che potrebbero restituire None in Python?
- 27. Utilizzo di un semaforo anziché di un ciclo while. Questo è buono o cattivo?
- 28. Python: può __file__ essere None se l'importazione è riuscita?
- 29. Errore Maresciallo cattivo - runnake
- 30. decoratore login_required su viste ajax per restituire 401 anziché 302
"Giusto" dato quale contesto? –
Un esempio restituirebbe i risultati da una query REST. – espeed