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