Successfully reported this slideshow.
Your SlideShare is downloading. ×

Python Funcional

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 23 Ad

More Related Content

Slideshows for you (20)

Similar to Python Funcional (20)

Advertisement

Recently uploaded (20)

Advertisement

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')

×