Це скоріше зворотне значення для чого можна використовувати функції генератора Python? : генератори python, вирази генератора та itertools
модуль - деякі з моїх улюблених особливостей python в наші дні. Вони особливо корисні при налаштуванні ланцюжків операцій для виконання великої купи даних - я часто використовую їх при обробці файлів DSV.
Тож коли не сприятливий час використовувати генератор, або вираз генератора, або itertools
функцію?
- Коли я повинен віддати перевагу
zip()
надitertools.izip()
, або range()
більшеxrange()
, або[x for x in foo]
закінчено(x for x in foo)
?
Очевидно, що нам врешті-решт потрібно "перетворити" генератор на фактичні дані, як правило, шляхом створення списку або ітерації над ним за допомогою негенераторного циклу. Іноді нам просто потрібно знати довжину. Це не те, про що я прошу.
Ми використовуємо генератори, щоб не призначати нові списки в пам’яті для проміжних даних. Це особливо має сенс для великих наборів даних. Чи є сенс також для невеликих наборів даних? Чи є помітний компроміс пам’яті / процесора?
Мені особливо цікаво, якщо хтось робив деякі профілі з цього приводу, у світлі привабливого обговорення продуктивності розуміння списку порівняно з map () та filter () . ( alt посилання )
<5
.