Iterators e Generators em Python. O que são e por que usar?

Iterators e Generators ? Que coisa estranha, não? Parecem coisas de outro mundo, mas eu te garanto que não são e ainda afirmo, você sempre usou ao menos uma dessas funcionalidades sem nem perceber. De forma geral, ambos funcionam como um modo de entregar dados sob demanda sem que a memória seja usada excessivamente e de forma um tanto quanto fluída. É, eu sei que você não entendeu nada, na verdade nem eu. Mas vamos simplificar isso, vamos a um exemplo. Suponhamos que temos uma função que gera uma lista de determinado tamanho, com números inteiros aleatórios entre 0 e 10 e precisamos iterar sobre esse retorno, nosso código ficaria tipo isso: import random def gera_dados(m): dados = [] for n in range (m): dados. append ( random .randint( 0 , 10 )) return dados Essa função vai funcionar? Sim, vai. Mas como pode-se ver, até completar o número de iterações que queremos, ...