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!

One Response to “Debulhando Python - parte 1”

  1. coredump Says:

    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

Leave a Reply