Quando não é um bom momento para usar geradores python?

Isso é o inverso dePara que você pode usar as funções do gerador Python?: geradores python, expressões de gerador e oitertools O módulo são alguns dos meus recursos favoritos do python atualmente. Eles são especialmente úteis ao configurar cadeias de operações para serem executadas em uma grande pilha de dados - eu geralmente as uso no processamento de arquivos DSV.

Então quando énão um bom momento para usar um gerador, ou uma expressão de gerador, ou umitertools função?

Quando devo preferirzip() sobreitertools.izip()ourange() sobrexrange()ou[x for x in foo] sobre(x for x in foo)?

Obviamente, precisamos eventualmente "resolver" um gerador em dados reais, geralmente criando uma lista ou iterando sobre ele com um loop não gerador. Às vezes, só precisamos saber o comprimento. Não é isso que estou perguntando.

Usamos geradores para não atribuir novas listas à memória para dados provisórios. Isso faz sentido especialmente para grandes conjuntos de dados. Também faz sentido para pequenos conjuntos de dados? Existe uma troca notável de memória / CPU?

Estou especialmente interessado se alguém tiver feito algum perfil sobre isso, à luz da discussão de abrir os olhos sobredesempenho de compreensão da lista vs. map () e filter (). (link alternativo)

questionAnswers(9)

yourAnswerToTheQuestion