Debulhando Python - parte 1
Bom, como já disse em outros posts, ando estudando python há um tempinho e cada dia fico mais maravilhado
espero poder compartilhar um pouco de sabedoria com meus humildes leitores.
Uma coisa muito legal em python, é a função anônima Lambda. Trata-se de uma função bem funcional! (Trocadilho não-intencional)
Lambda veio da linguagem de programação LISP e foi incorporada por necessidade dos usuarios. Sua origem pura é da álgebra linear
onde lambda é um autovalor usando eu autovetores, autovetores são representados assim: F, e A: V -> V
Agora veremos como isso foi parar em python e sua similaridade com a álgebra linear:
supondo que necessitamos de uma função para fazer calculos complexos em python (exemplo simples e inutil na vida real):
#função para elevar numero ao cubo e somar por ele mesmo def calculo1(valor): resultado=(valor**3)+valor return resultado #usando a função: print calculo1(243) #a saída será: 14349150 #agora usando lambda não precisaremos definir #uma função, basta usar uma função anônima, #veja porquê é funcional: print (lambda valor: (valor**3)+valor)(243)
#a saída será: 14349150
PRONTO!
Aí você me diz: -”Poxa, mas pra quê isso tudo?” ou “Lambda é complicado, prefiro usar um função normal”
mas como eu disse, foi só um exemplo simples, mas vamos usar algo levemente mais criativo:
Imagine uma lista de tuplas, cada tupla com um par de valores sendo o primeiro item do par uma string e o segundo item um inteiro
que tal somarmos os valores inteiros de cada tupla na lista ou mesmo gerar uma nova lista só de inteiros??
usaremos a função reduce do python, dedicarei outro post somente às funções embutidas na linguagem, por hora vamos simplesmente implementar reduce usando lambda:
lista = [("abc",1),("cde",2),("a",3),("b",4),("c",5),
("d",6),("g",7),("a",32)] novaLista=[] soma=0 for cadaTupla in lista: valor+=reduce(lambda campo1, campo2: campo2, cadaTupla) novaLista.append( reduce(lambda campo1, campo2: campo2, cadaTupla) ) #o resultado do laço acima é: novalista == [1,2,3,4,5,6,7,32] soma == 60
Bom, por enquanto é só isso, espero contribuir cada vez mais nessa novela. Comentários são bem vindos!
janeiro 30th, 2007 at 9:10 am
Essas funções bizarras do Python estão sendo retiradas de uso aos poucos e substituídas por coisas menos ilegíveis como list comprehension [x for x in list] ou funções declaradas completamente.
lambda faz mal pra pele e estraga os dentes
http://www.artima.com/weblogs/viewpost.jsp?thread=98196