Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Python Funcional
    Rodrigo Lira
Rodrigo Lira
Aluno do 5º período de Engenharia
da Computação na UPE.

Estuda Python desde o final de 2008.

Participa dos ...
Programação Funcional
 Paradigma que enfatiza a aplicação de
 funções.

 LISP (LISt Processing) criada em 1958 no
 MIT por...
Programação Funcional
             --Haskell
somaLista :: [Int] -> Int
somaLista [] = 0
somaLista (a:x) = a + somaLista x
Python Funcional
Multiparadigma (Imperativo, OO, Funcional)

Possui muitas das ferramentas funcionais
desde a sua versão 1...
Python Funcional
        Função                Versão       Contribuição
lambda, map, filter, reduce     1.0.0          Am...
Lambda
Função anônima.

Seu corpo deve conter apenas expressão.

Não possui a instrução return.

Seguem o modelo:

lambda ...
Lambda
Definição
(lambda x,y: x+y)(10,2) #12

“Nomeando”
func=lambda x: x**2+10
print func(100) #110

Parâmetros opcionais...
BDFL x Lambda
   “A maioria dos usuários do Python não estão
   familiarizados com Lisp ou Scheme, por isso o
   nome é co...
Map
Função de mapeamento.

  map(função ou None,seq1,seq2,seqn)

Retorna uma lista com o resultado de
função(item).

Retor...
Map
map(lambda x: x>=0,[1,-2,3,45,0,-1223])
#[True, False, True, True, True, False]

map(pow,[1,2,3,4],[3,2,1]) # 4**None
...
Filter
Aplicação de filtro

        filter(função ou None,seq)

Tem como retorno uma sequência formada
por todos os itens ...
Filter
#Palíndromos
filter(lambda x: x[::-1]==x,["casa","ovo","palavra","radar"])
['ovo', 'radar']


#3025 = (30 + 25) = 5...
List Comprehesions
Fornece uma maneira mais sucinta para
criação de lista.

[ var for var in seq if <condição> ]

If é opc...
List Comprehesions

Comportamento Filter

      [ var for var in seq if func(var) ]

Comportamento Map

         [ func(va...
List Comprehesions
[i for i in range(20) if i%2 == 0]
#[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

[ord(x) for x in "Python"]
[80...
Reduce
Aplica uma função binária aos elementos da
sequência, e depois reduz a um único valor.

     reduce(função,seq1[,in...
Reduce
Funcionamento

reduce(lambda x, y: x*y, [1, 2, 3, 4, 5])

((((1*2)*3)*4)*5) = 120
Round 2
                     Se você está matando reduce(), por
                     que você está mantendo map() e
      ...
Any/All
all – Retorna True se todos os elementos do
iterable for True caso contrário retorna False.
Se o iterable for vazi...
Any/All
any((True,False,True,False,False)) #True

#Há algum múltiplo de 3 ou 5
any(map(lambda x: x%3==0 or x%5==0,(7,11,3,...
Zip
Retorna uma lista cujos elementos são
tuplas resultantes de cada um dos
elementos de uma ou mais sequências de
entrada...
Zip
Unzip

                         zip(*zipada)


nomes = [ ("Rodrigo","Lira"),("Rui","Ricardo")]
nome,sobrenome = zip(*n...
Upcoming SlideShare
Loading in …5
×

Python Funcional

1,234 views

Published on

Palestra realizada por Rodrigo Lira no VI ENCONTRO do PUG-PE sediada na UFRPE - Recife - Pernambuco dia 14/08/2010.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Python Funcional

  1. 1. Python Funcional Rodrigo Lira
  2. 2. Rodrigo Lira Aluno do 5º período de Engenharia da Computação na UPE. Estuda Python desde o final de 2008. Participa dos grupos Python Poli e do PUG-PE. http://tiny.cc/rodrigolira
  3. 3. Programação Funcional Paradigma que enfatiza a aplicação de funções. LISP (LISt Processing) criada em 1958 no MIT por John McCarthy. Haskell, Common Lisp, Miranda, Erlang, Scheme, ML .
  4. 4. Programação Funcional --Haskell somaLista :: [Int] -> Int somaLista [] = 0 somaLista (a:x) = a + somaLista x
  5. 5. Python Funcional Multiparadigma (Imperativo, OO, Funcional) Possui muitas das ferramentas funcionais desde a sua versão 1.0 . lambda, map, filter, reduce, zip ,list comprehensions providenciam as ferramentas básicas para programação funcional.
  6. 6. Python Funcional Função Versão Contribuição lambda, map, filter, reduce 1.0.0 Amrit Prem sum 2.3 ---- any,all 2.5 Raymond Hettinger List comprehensions, zip 2.0 beta 1 Greg Ewing, Skip Montanaro e Thomas Wouters
  7. 7. Lambda Função anônima. Seu corpo deve conter apenas expressão. Não possui a instrução return. Seguem o modelo: lambda arg1,arg2,arg3,argn: expressão
  8. 8. Lambda Definição (lambda x,y: x+y)(10,2) #12 “Nomeando” func=lambda x: x**2+10 print func(100) #110 Parâmetros opcionais func=lambda x,y=3: x>y func(1) #False func(1,-1) #True
  9. 9. BDFL x Lambda “A maioria dos usuários do Python não estão familiarizados com Lisp ou Scheme, por isso o nome é confuso, também existe um equívoco generalizado que lambda possa fazer coisas que uma função aninhada não pode. (...) Mesmo com um nome melhor, eu acho que ter as duas opções lado a lado, exige apenas os programadores a pensar em fazer uma escolha que é irrelevante para o seu programa, não tendo a escolha simplifica o processo de pensamento. Além disso, uma vez que map(), filter() e reduce() sumirão, não há um monte de lugares onde você realmente precisa escrever funções lambda;“ Guido van Rossum http://is.gd/e8cCv
  10. 10. Map Função de mapeamento. map(função ou None,seq1,seq2,seqn) Retorna uma lista com o resultado de função(item). Retorna um iterator em Python 3.
  11. 11. Map map(lambda x: x>=0,[1,-2,3,45,0,-1223]) #[True, False, True, True, True, False] map(pow,[1,2,3,4],[3,2,1]) # 4**None map(None,(1,2,3),[2,2,3,4]) #Comportamento semelhante à zip
  12. 12. Filter Aplicação de filtro filter(função ou None,seq) Tem como retorno uma sequência formada por todos os itens em que func(item) é True. Ifilterfalse tem comportamento inverso. Retornar um iterator em Python 3.
  13. 13. Filter #Palíndromos filter(lambda x: x[::-1]==x,["casa","ovo","palavra","radar"]) ['ovo', 'radar'] #3025 = (30 + 25) = 55² = 3025 filter(lambda x: sum(divmod(x,100))**2==x,xrange(1000,10000)) #[2025, 3025, 9801]
  14. 14. List Comprehesions Fornece uma maneira mais sucinta para criação de lista. [ var for var in seq if <condição> ] If é opcional PEP 202
  15. 15. List Comprehesions Comportamento Filter [ var for var in seq if func(var) ] Comportamento Map [ func(var) for var in seq]
  16. 16. List Comprehesions [i for i in range(20) if i%2 == 0] #[0, 2, 4, 6, 8, 10, 12, 14, 16, 18] [ord(x) for x in "Python"] [80, 121, 116, 104, 111, 110] #Diretórios import os [path for path in os.listdir(".") if os.path.isdir(path)]
  17. 17. Reduce Aplica uma função binária aos elementos da sequência, e depois reduz a um único valor. reduce(função,seq1[,inicializador]) Pode receber uma valor para inicialização. A partir de Python 2.7 foi movido para functools.
  18. 18. Reduce Funcionamento reduce(lambda x, y: x*y, [1, 2, 3, 4, 5]) ((((1*2)*3)*4)*5) = 120
  19. 19. Round 2 Se você está matando reduce(), por que você está mantendo map() e filter()? Eu não estou matando reduce() porque eu odeio programação funcional, eu estou matando porque quase todos os códigos usando reduce() é menos legível que a mesma coisa escrita, utilizando um loop e uma variável acumulador. Por outro lado, map() e filter() muitas vezes são úteis e quando usado com uma função pré-existentes (por exemplo, um built-in) são mais claros do que uma list comprehensions ou generators. Python 3000 FAQ http://is.gd/egQKe
  20. 20. Any/All all – Retorna True se todos os elementos do iterable for True caso contrário retorna False. Se o iterable for vazio retorna True. any – Retorna True se algum dos elementos do iterable for True caso contrário retorna False. Se o iterable for vazio retorna False. Ambas foram pedidos de Guido.
  21. 21. Any/All any((True,False,True,False,False)) #True #Há algum múltiplo de 3 ou 5 any(map(lambda x: x%3==0 or x%5==0,(7,11,3,4,2))) #True #Só existe arquivo na pasta raiz? from os import path from os import listdir all([path.isfile(caminho) for caminho in listdir('/')])
  22. 22. Zip Retorna uma lista cujos elementos são tuplas resultantes de cada um dos elementos de uma ou mais sequências de entrada seq1, seq2, seqN. zip(seq1,seq2,seqn) A lista resultante é truncada ao tamanho para o tamanho da menor lista.
  23. 23. Zip Unzip zip(*zipada) nomes = [ ("Rodrigo","Lira"),("Rui","Ricardo")] nome,sobrenome = zip(*nomes) #sobrenome ('Lira', 'Ricardo') #nome ('Rodrigo', 'Rui')

×