C'est plutôt l'inverse de Ce que vous pouvez utiliser Python générateur de fonctions?: python générateurs, générateur d'expressions, et l' itertools
module sont certains de mes fonctionnalités préférées de python ces jours-ci. Ils sont particulièrement utiles lors de la configuration de chaînes d'opérations à effectuer sur un gros tas de données--j'ai souvent utiliser lors du traitement de la DSV fichiers.
Alors, quand est-ce pas un bon moment pour utiliser un groupe électrogène, ou un générateur d'expression, ou un itertools
fonction?
- Quand dois-je préfère
zip()
suritertools.izip()
, ou -
range()
surxrange()
, ou -
[x for x in foo]
sur(x for x in foo)
?
Évidemment, nous avons finalement besoin pour "résoudre" un générateur en données réelles, généralement par la création d'une liste ou d'une itération sur elle avec une non-générateur de boucle. Parfois, nous avons juste besoin de connaître la longueur. Ce n'est pas ce que je vous demande.
Nous utilisons des générateurs de sorte que nous ne sommes pas affecter de nouvelles listes en mémoire pour des données provisoires. En particulier, cela a du sens pour de grands ensembles de données. Est-il judicieux pour les petits jeux de données? Est-il perceptible mémoire/cpu compromis?
Je suis surtout intéressé si quelqu'un a fait un certain profilage sur ce, à la lumière de l'oeil-ouverture du débat de compréhension de liste rendement en fonction map() et filter().