Opinie wydają się być mieszane w tym - czy istnieje "właściwa droga" w Pythonie?Czy to jest zły styl Pythona, aby zwracać puste iteratory, a nie Brak?
Odpowiedz
Myślę, że pusty iterator jest lepszy, ponieważ iteracja przez nic jest szybsza niż pierwsze sprawdzenie, czy zwrócona wartość nie jest Brak, a następnie iteracja ponad lub nie.
for x in function():
do_something()
value = function()
if value is not None:
for x in value:
do_something()
Spójrz na to.
Zwykle nie inicjalizujesz atrybutów iter za pomocą None, ale z pustym obiektem iteracji.
self.list_of_users = []
nie
self.list_of_users = None
_ "iteracja nad niczym jest szybsza" _ '[potrzebne źródło]'. Tak, to _terser, _ ale bez niektórych wyników 'timeit', nie jestem przekonany, że jest _faster._ –
Możesz napisać to jako:' dla elementu w some_func() lub []: pass' lub '[do_something (element) dla elementu w some_func() lub []] '. – espeed
Weź również pod uwagę przypadek, gdy musisz zrobić coś innego, gdy funkcja nie zwraca wyników, musisz najpierw sprawdzić rozmiar iteratora. – espeed
powszechnej praktyki, że nauczono do naśladowania jest powrót tego samego typu danych dla wszystkich prawidłowych wartości w domenie wejściowego, jeśli możesz. Ułatwia innym korzystanie z Twojego kodu, a twoja dokumentacja będzie czystsza. W przypadku wartości spoza poprawnej domeny wejściowej należy podnieść wyjątki.
Pusty iterator, a nie Brak, wydaje się być w tym przypadku lepszą praktyką. Wiem, że inne języki programowania lubią zwracać wartość null w tych instancjach, ale nie widzę korzyści, aby to zrobić w scenariuszu, który opisałeś.
Jednym z powodów, dla których byłem w obozie "nie zwracaj pustego iteratora", jest to, że jeśli chcesz zrobić coś dla pustej skrzynki, musisz sprawdzić rozmiar iteratora przez 'if len (wyniki): 'i może to być kosztowne, jeśli iterator jest duży,' 'jeśli wyniki to Brak:' jest tanie, a przez to bardziej elastyczne. – espeed
jeśli x jest iteratorem, "jeśli x" zwróci False, jeśli x jest pusty –
- 1. Czy jest to zły styl lub nieprawidłowy dostęp do makra va_arg przez odniesienie?
- 2. Czy to zawsze zły pomysł, aby użyć + do łączenia ciągów
- 3. Konwersja nic, że nie jest to numer puste
- 4. Czy komentarze C++ są uważane za zły styl w C?
- 5. Co to jest styl menu?
- 6. Czy wiele odwołań before_action wywołuje zły styl kodu?
- 7. Jak utworzyć indeks mongo, aby upewnić się, że pole nigdy nie jest puste/puste/puste?
- 8. Ustalanie, czy przecięcie strumienia nie jest puste
- 9. Python: czy to zły formularz do zgłaszania wyjątków w __init__?
- 10. Co to są Iteratory SCARY?
- 11. Co to jest puste urządzenie graficzne?
- 12. Spraw, aby Pylint zadbał o puste linie.
- 13. Dziedziczenie wielu szablonów django - czy jest to właściwy styl?
- 14. Dlaczego JFormattedTextField jest zły?
- 15. Dlaczego "to" jest wskaźnikiem, a nie odniesieniem?
- 16. Czy FLAG_ONL__ALERT_ONCE jest uszkodzony, czy zły, czy oba naraz?
- 17. jak tworzyć bardziej ekspresyjne iteratory Pythona? podobnie jak C++ iteracyjnej
- 18. , aby sprawdzić, czy wszystkie EditText są puste
- 19. Czy przełącznik jest tak zły, jak gdyby?
- 20. Czy to jest przesłonięcie metody, czy nie?
- 21. Zamień puste ciągi na wartości Brak/puste w DataFrame
- 22. Jak rozwiązać "iterator powinien zwracać ciągi, a nie bajty"
- 23. Czy srand (time (NULL)) jest zły?
- 24. Pandy Pythona sprawdzają, czy ramka danych nie jest pusta.
- 25. element iframe do ładowania reklamy jest dobry czy zły?
- 26. To jest zły pomysł, aby przejść teraz do LINQ do SQL?
- 27. Czy to nie jest zdefiniowane?
- 28. Czy to nie jest krotka?
- 29. Czy super-SCARY iteratory są legalne?
- 30. Co to jest stelaż - błąd "brak akceptora"?
"Właściwa droga" z jakiego kontekstu? –
Przykładem może być zwrócenie wyników z zapytania REST. – espeed