Wystarczy spojrzeć na generatory Pythona, naprawdę pod wrażeniem ich, ale czy są jakieś rzeczy, z których nie można ich użyć? Zastanawiałem się nad przeszłym kodowaniem C, w którym czytanie z pliku lub działania użytkownika byłyby obszarami. Na przykład, czy generator może zostać użyty do zgłoszenia użytkownika do wprowadzenia (wprowadzenie danych bazowych?) I procesu wywołującego, który wprowadza? czy są jakieś problemy związane z wydajnością lub czyszczeniem?Generator Pythona - czego nie używać do
Odpowiedz
Jeden problem z generatorów jest to, że dostać "zużyte". Oznacza to, że jeśli chcesz powtórzyć sekwencję ponownie, musisz ponownie utworzyć generator.
Jeśli leniwy wynik jest problemem, prawdopodobnie nie chcesz generować wyrażenia. Na przykład, jeśli chcesz wykonać wszystkie swoje obliczenia z góry (na przykład, aby zwolnić zasób), najprawdopodobniej najlepiej będzie zinterpretować listę lub pętlę for.
Jeśli użyjesz psyco, uzyskasz znaczny wzrost szybkości dla wyrażeń list i pętli, ale nie dla generatorów.
Oczywiście, jeśli potrzebujesz długości sekwencji z przodu, nie chcesz generatora.
Generatory nie utrzymują się dobrze.
Generalnie pojawia się błąd podczas próby utrwalenia obiektu generatora.
>>> def generatorForEvenKeys(aDictionary):
for k in aDictionary:
if k % 2 == 0: yield aDictionary[k]
>>> x = generatorForEvenKeys(someDictionary)
>>> pickle.dump(x,file('temp.dat','wb'))
dostaje następujący błąd:
TypeError: can't pickle generator objects
użyć generatora, gdy chcemy mieć coś być iterateable, bez trzymania całą listę w pamięci (to dlatego xrange
obsługuje znacznie dłuższe sekwencje niż range
w Pythonie 2.x oraz niższy)
Kiedy trzeba aby załadować do pamięci całą "listę rzeczy do zrobienia", nie ma sensu używać generatora - równie dobrze możesz po prostu zwrócić listę.
Przez (nieco contrived) przykład:
def my_pointless_generator(x):
thedata = range(x) # or thedata = list(range(x)) in Python 3.x
for x in thedata:
yield x
..can być zapisane tak efektywnie, jak to ..
def my_pointless_generator(x):
return range(x)
- 1. Generator kodu Pythona
- 2. Do czego należy używać secret.cookieParser()?
- 3. Do czego służy funkcja wymuszania Pythona()?
- 4. Do czego służy słowo kluczowe "z" pythona?
- 5. Czy mogę zapamiętać generator Pythona?
- 6. Czego używać do przechowywania baz danych PhoneGap
- 7. Czego używać zamiast Object.keys()?
- 8. Do czego służy os.linesep?
- 9. javascript ken generator generator liczb
- 10. przenoszenie programu Python 2 do Pythona 3, generator losowej linii
- 11. Czego backticks znaczy interpreter Pythona: `num`
- 12. Historie i specyfikacje RSpec: Kiedy używać czego?
- 13. Do czego służy Python string.find?
- 14. Dlaczego do instalacji Pythona należy używać Homebrew?
- 15. Czego używać zamiast Google Transliterate API
- 16. Czego używać? MVC, MVP lub MVVM lub ...?
- 17. Do czego służy cordova/argscheck?
- 18. Generator Expression do zainstalowania() nakazuje
- 19. Do czego służy UnmanagedMemoryStream?
- 20. Do czego służą finalizatory?
- 21. do czego służy SDKDDKVer.h?
- 22. Do czego służy Enum?
- 23. Do czego służy app.config?
- 24. Do czego służyło `auto`?
- 25. Do czego służy DTMobileIS?
- 26. Do czego służy Control.IsHandleCreated?
- 27. apt vs wsgen vs wsimport. Konfundowanie na temat czego używać i kiedy nie używać innego
- 28. Czy ktoś może polecić przyzwoity generator FOSS PDF dla Pythona?
- 29. Jak używać menedżera kontekstowego Pythona wewnątrz generatora
- 30. python generator html
+1 dobrze wiedzieć – ebo
Czy możesz podać jakiś przykład? – bayer
bayer: Przykład: Iteruję nad dokumentem tekstowym i zwracam słowa. Chcę wybrać generator tak, aby móc kontynuować czytanie dokumentu tekstowego z miejsca, w którym skończyłem. Ups! Żargon. Co za PITA. –