Это скорее обратное к Что вы можете использовать для функций генератора Python для?: генераторы python, генераторные выражения и модуль itertools
являются некоторыми из моих любимых функции python в эти дни. Они особенно полезны при настройке цепей операций для работы на большой куче данных - я часто использую их при обработке файлов DSV.
Итак, когда не подходящее время для использования генератора или выражения генератора или функции itertools
?
- Когда я предпочитаю
zip()
надitertools.izip()
или -
range()
надxrange()
или -
[x for x in foo]
над(x for x in foo)
?
Очевидно, что нам в конечном итоге нужно "разрешить" генератор в фактические данные, как правило, путем создания списка или итерации по нему с помощью негенераторного цикла. Иногда нам просто нужно знать длину. Это не то, о чем я прошу.
Мы используем генераторы, чтобы мы не назначали новые списки в память для промежуточных данных. Это особенно важно для больших наборов данных. Это имеет смысл и для небольших наборов данных? Есть ли заметный компромисс памяти/процессора?
Мне особенно интересно, если кто-то проделал какое-то профилирование по этому поводу, в свете открывающего обсуждения для определения понимания списка по сравнению с map() и фильтр(). (alt link)