Você está na página 1de 3

As Vrias Faces do Python - Programao Funcional Ol pessoal!

No tive como postar antes do final de semana, mas aqui estamos com mais Python pra vocs. Vamos falar agora sobre Programao Funcional em Python. Pra quem ainda no viu os outros posts dobres as faces do python aqui esto: Programao Procedural; Programao Orientada a Objetos. Vamos agora ento ao que interessa. A programao funcional um paradigma de programao que divide o problema em vrias funes, sem que estas funes possuam estados internos que permitam a gerao de resultados diferentes para vrias execues da mesma funo para os mesmos parmetros. Assim, para a programao funcional, os resultados retornados por uma funo devem depender unicamente dos parmetros de entrada. Sob certos aspectos, a programao funcional pode ser considerada o oposto da orientao a objetos, j que a primeira evita estados internos enquanto a segunda se baseia nas modificaes dos estados internos dos objetos. Abaixo so listados alguns motivos para se usar o paradigma funcional: Os programas podem ser testados atravs de prova formal para comprovar que esto corretos; Voc obrigado a quebrar seu problema em pequenos pedaos, sendo assim um paradigma que gera programas modularizados; mais fcil encontrar e corrigir erros (debugar o cdigo); Funes mais gerais podem ser reaproveitadas em muitas situaes, como uma que receba o caminho para um arquivo e retorne seu contedo. assim, possvel escrever novos programas simplesmente reordenando algumas funes existentes e escrevendo as outras mais especficas do problema atual. Dois grandes trunfos do Python para a programao funcional so os geradores e iteradores (generators e iterators), porm, devido sua importncia, estes merecem uma postagem especfica. Hoje, veremos funes que so timas ferramentas para a programao funcional. Estas so: lambda, map(), filter() e reduce(). lambda lambda uma palavra chave do python que utilizada para definir pequenas funes annimas. Esta uma das caractersticas que o Python emprestou das linguagens funcionais mais famosas. As expresses lambda somente permitem uma expresso, o que faz delas mais um recurso para deixar a sintaxe mais elegante. Vejamos como usar:

>>> soma = lambda x, y : x + y >>>soma(1, 2) 3 Muito simples, mas totalmente substituvel por definies comuns de funes. Um problema em utilizar funes lambda que estas podem se tornar pouco ou nada inteligveis caso algum tente fazer algo muito complexo dentro delas. Geralmente o ideal definir uma funo da forma tradicional. filter() Esta funo recebe com parmetros uma funo e uma sequncia (uma lista por exemplo), executando a funo para cada elemento da sequncia e retornando os elementos para os quais a funo retorna verdadeiro. Vejamos o seguinte exemplo >>> #retornar os nmeros primos entre 4 e 25 >>> filter(lambda x : x % 2 != 0 and x % 3 != 0, range(4, 25)) [5, 7, 11, 13, 17, 19, 23] Como dito acima, uma funo lambda maior pode se ternar difcil de entender, mas esta ainda bem simples: retorna veradeiro se o nmero no for divisvel por 2 nem por 3. Assim, os nmeros retornados so os primos entre 4 e 25. Uma forma bastante til de utilizar a funo filter para verificar a pertinncia dos elementos de um grupo. Por exemplo: >>> #verifica a existncia de palavras que contm a letra z >>> lista_sem_z = ['alface', 'camaro', 'ameixa', 'zebra'] >>> result = filter(lambda x : 'z' in x, lista_sem_z) >>>if len(result) > 0: ... print 'A(s) palavra(s)', reult, 'no deveria(m) estar aqui' ... A(s) palavra(s) ['zebra'] no deveria(m) estar aqui

map() Esta funo recebe como parmetros uma funo e uma sequncia assim como a filter(), porm, esta retorna uma lista com o resultado da funo calculada sobre cada elemento da sequncia.

Veja as seguintes situaes: >>> cubo = lambda x : x*x*x >>> map(cubo, range(7)) [0, 1, 8, 27, 64, 125, 216] >>> soma = lambda x, y : x + y >>> map(soma, range(3), range(1, 4)) [1, 3, 5]

reduce() Esta funo, por sua vez, recebe os mesmos parmetros que as duas anteriores, porm retorna um nico valor, calculado a partir de uma funo de dois argumentos da seguinte forma: 1. Calcula a funo sobre os dois primeiros elementos da sequncia; 2. Calcula a funo sobre o resultado e o valor seguinte, assim, sucessivamente. Vejamos exemplos: >>> reduce(lambda x, y : x + y, range(11)) 55 >>> reduce(lambda x, y : x * y, range(1, 4)) 6 Isto conclui a apresentao destas ferramentas de programao funcional da linguagem Python. Espero que tenha gostado!

Python uma linguagem de programao de alto nvel (Linguagem de programao de alto nvel o que se chama na Cincia da Computao de linguagens de programao com um nvel de abstrao relativamente elevado, longe do cdigo de mquina e mais prximo linguagem humana), interpretada (Linguagem interpretada uma linguagem de programao, onde o cdigo fonte nessa linguagem executado por um programa de computador chamado interpretador, que em seguida executado pelo sistema operacional ou processador), interativa, orientada a objetos (a orientao a objetos um paradigma de anlise, projeto e programao de sistemas de software baseado na composio e interao entre diversas unidades de software chamadas de objetos), de tipagem dinmica e forte. Foi lanada por Guido van Rossum em 1991. Atualmente possui um modelo de desenvolvimento comunitrio, aberto e gerenciado pela organizao sem fins lucrativos Python Software Foundation. Apesar de vrias partes da linguagem possurem padres e especificaes formais, a linguagem como um todo no formalmente especificada. O padro de fato a implementao CPython (CPython a implementao principal da linguagem de programao Python, escrita em Linguagem C).

Você também pode gostar