Jest to raczej odwrotność do czego można używać funkcji generatora w języku Python? : generatory Pythona, wyrażenia generatora i itertools
moduł 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 itertools
funkcji?
- 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
.