Jest to raczej odwrotność do czego można używać funkcji generatora w języku Python? : generatory Pythona, wyrażenia generatora i itertoolsmoduł to niektóre z moich ulubionych funkcji w dzisiejszym Pythonie. Są szczególnie przydatne podczas konfigurowania łańcuchów operacji do wykonania na dużym stosie danych - często używam ich podczas przetwarzania plików DSV.
Kiedy więc nie jest dobry moment na użycie generatora, wyrażenia generatora lub itertoolsfunkcji?
- Kiedy wolę
zip()więcejitertools.izip(), lub range()ponadxrange()lub[x for x in foo]koniec(x for x in foo)?
Oczywiście ostatecznie musimy „rozłożyć” generator na rzeczywiste dane, zwykle tworząc listę lub iterując po niej pętlą nie będącą generatorem. Czasami wystarczy znać długość. Nie o to proszę.
Używamy generatorów, aby nie przypisywać nowych list do pamięci dla danych tymczasowych. Ma to sens zwłaszcza w przypadku dużych zbiorów danych. Czy ma to sens także w przypadku małych zbiorów danych? Czy występuje zauważalny kompromis między pamięcią a procesorem?
Jestem szczególnie zainteresowany, jeśli ktoś zrobił jakieś profilowanie na ten temat, w świetle otwierającej oczy dyskusji na temat wydajności rozumienia list w porównaniu z mapą () i filtrem () . ( link alternatywny )
<5.