Tudo Sobre Nada

Funções geradoras em Python

Para quem sabe alguma coisa de Python, os geradores não são propriamente uma novidade, mas mesmo assim não deixam de ser uma das funcionalidades mais interessantes desta linguagem.

def powers():
n = 1

while (1):
yield 2**n # um "return" que não termina a função
n += 1


if __name__ == "__main__":
i = powers()

for n in range(16):
print i.next() # 2 4 8 16 32 64 128 ...

Para todos os efeitos são apenas iteradores, mas permitem separar conceptualmente o percorrer dos valores gerados da forma como vão ser utilizados, o que permite até encará-los como ciclos infinitos, como se pode ver pelo código acima.

Python is fun!

3 Comentário(s)

  • São as maravilhas da lazy evaluation ;) em Haskell passa-se o mesmo:

    powers = [ 2 ^ n | n <- [1..] ]

    (ou seja: eu que ainda não sei Python, começo a ver que realmente não foi assim uma perda de tempo tão grande ter de estudar Haskell :P)

    Por Anonymous João Craveiro, em 07 Fevereiro, 2006 00:43  

  • Pois, mas em Python estas coisas são implementadas num estilo mais imperativo, o que é bom para mim, que não gosto de linguagens funcionais (alguns trabalhos em Caml para a faculdade, a repetir apenas se for obrigado).

    Por Blogger Carlos Rodrigues, em 07 Fevereiro, 2006 01:08  

  • you can be sure... Python is really fun! :)

    para qum gosta de trabalhar em Python e precisa de um IDE fixe sugiro o PyDev, que roda sobre o Eclipse, http://pydev.sourceforge.net/ , e que acabou de conhecer a versão 1.0 há poucos dias.

    Por Blogger pescadorDigital, em 08 Fevereiro, 2006 09:58