lambda e generator


codigo_pythonTem duas coisas bem interessantes no python que me chamam a atenção ( dentre muitas outras tb ! ):
1. Funções lambda

“No Python, lambda é uma função anônima composta apenas por expressões. As funções
lambda podem ter apenas uma linha, e podem ser atribuídas a uma variável. Funções
lambda são muito usadas em programação funcional.”
Não precisa mais do este trecho do livro “Python para desenvolvedores” para explicar isto.
Fora que as funções lambda consomen menos recursos computacionais para funcionar.

Mais algumas informações teóricas na Wikipedia sobre Programação Funcional e Cálculo Lambda .

Então vamos ao exemplo em python:

>>> soma = lambda a,b: a+b
>>> print soma(1,2)
3
>>> loga = lambda t : open('log.log','a').write(t)
>>> loga('teste')

Assim podemos criar várias destas funções para nos auxiliar em algumas tarefas repetitivas consumindo menos recurso, agilizando nosso sistema.
Porém é bom tomar cuidado para não se perder e complicar muito, pois como vemos elas são tão simples e nada intuitivas, podendo as vezes nos confundir com algum código mais obscuro ! heheh

2. Generators

O processamento padrão de um método qualquer é: entrar, processar e retornar.
Com os generators a ordem muda um pouco, onde no meio do precessamento retornamos dados, e depois voltamos a processar do mesmo ponto de saída, tendo o estado anterior “lembrado”.
Veja um exemplo (bem simples para compreenção):

 >>> def get_letras():
 ...     letras = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','x','y','z']
 ...     for letra in letras:
 ...         yield letra
 ...
 >>> for l in get_letras():
 ...     print l, "<--"
 ...
 a <--
 b <--
 c <--
 d <--
 e <--
 f <--
 g <--
 h <--
 i <--
 j <--
 k <--
 l <--
 m <--
 n <--
 o <--
 p <--
 q <--
 r <--
 s <--
 t <--
 u <--
 v <--
 x <--
 y <--
 z <--
 >>>

O que ocorreu no codigo acima ? ( descrevendo com minhas palavras ): Ao chamar “get_letras”, o python processou o método até encontrar “yield”, que é onde o processamento deste método pára, seu estado fica “congelado” e o valor referido no mesmo é retornado, no caso a variável “letra”, então onde esta função foi chamada recebe o valor e processa da forma que lhe convém, no caso um: print l, “<–“.
Assim, podemos utilizar para muitas funções diferentes nossoa geradores, que na real, não precisam ser de fato “geradores”, gerando resultados, mas sim, retornando sequencialmente cada item de algo esperado, por exemplo uma lista de arquivos de um diretório.

Bem interessante e útil!

Bom, lembrem que não sou professor e minha intenção aqui é aprender escrevendo, então desculpem-me se não sou muito didático ! heheh
Abraço a todos…

Anúncios

2 Comments

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s