Aula 20
1 Exercicio 10
Implemente um iterator que recebe um iterator e retorna os elementos sem repetições do mesmo elemento em sequencia.
iterator: a a a b b a c a b b b d ... saida: a b a c a b d ...
2 pacotes/modulos
Pacotes pre definidos
import math math.sin(3.14)
from math import sin,cos sin(3.14)
import math as ma ma.sin(3.14)
Veja o link para o standard library
- math - funcoes matematicas
- random - geracao de numeros aleatorios
- re - expressoes regulares
- os.path - diretorios e arquivos
- sys e os - interface com o sistema operacional
- collections - typos de dados para collections
- itertools - iterators
- functools - programacao funcional
- operator - operadores como funcao
- pickle - salva e le objetos ython
- concurrent.futures - processamento em paralelo
- urllib - acesso ao http
- time - informacoes temporais
Pacotes externos - requer instalacao pip
ou conda
- numpy - arrays
- pandas - data frames (tabelas)
- scipy - operacoes scientificas e estatisticas
- scikip-learn - aprendizado de maquina
- beautifulsoup - processar paginas html
- cherrypy - web server
3 Programacao funcional
3.1 funcoes anonimas
lambda
mas a funcao so pode ter 1 linha
lambda x : x > 0
3.2 map, filter
map(lambda x : x+3, [4,5,6,7]) filter(lambda x: x>0, [4,-5,6,-7])
3.3 fold (reduce)
foldl:
from functools import reduce reduce(combinacao, lista, inicial)
3.4 funcoes que recebem funcoes como um argumento extra
key: uma funçao que é aplicada em cada elemento e cujo valor é usa
max( iteratable, key=func) list.sort(key=func) sorted( iteratable, key=func)
max(lista,key=func) = max([(func(x),x) for x in lista][1]
Solucoes p/ o exercicio passado - retorna o item mais frequente
usando dicionarios - linear max(set(l),key=l.count) - entre linear e quadratico max([(l.count(x),x) for x in l])[1] - quadratico
3.5 operator
x[i]
ou x['çhave']
ou x.chave
podem ser convertidos em funcoes
itemgetter
-f = itemgetter(2)
entaof(x)
retornax[2]
f = itemgetter(2,3,5)
entaof(x)
retorna(x[2],x[3],x[5])
getitem
-getitem(x,2)
é o mesmo quex[2]
setitem
-setitem(x,2,"aaa") é o mesmo que =x[2] = "aaa"
itemgetter
retorna uma funcao,getitem
faz o mesmo que o operador mas com sintaxe de chamada de funcao.attrgetter
-f = attrgetter("chave")
entaof(x)
retorna =x.chave
itemgetter
é util para o key
4 Decorators
Forma de modificar o comportamento (externo) de classes e funcoes.
- funcoes que se lembram de execucoes passadas
- funcoes que fazem logs
- sao funcoes que recebem funcoes como argumentos e retornam uma outra funcao (que cuida dessa parte externa)
def llog(f): def wrapper(*args): print("entrada:",args) x = f(*args) print("saida:",x) return x return wrapper def aux(x,y): return 2*x+y zz = llog(aux)
4.1 notacao @
aux = llog(aux) @llog def aux(x,y): return 2*x+y
4.2 Decorators com estado - decorators como objetos
Voce pode retornar um objeto. se o objeto for chamado como funcao, o
metodo __call__
desse objeto sera executado
class decconta: def __init__(self,f): self.f=f self.conta=0 def __call__(self,*args): self.conta += 1 return self.f(*args) xx=decconta(aux)
4.3 mais info
5 Exercicios
- decorator para imprimir o tempo de execucao
- decorator para construir um string com linhas para a hora e argumentos e saida de cada chamada da funcao. O string sera acessado via atributo
- decorator para memoizar a funcao. Memoizacao é criar um dicionario que se lembra dos valores de entrada e de saida da funcao ja executado. Se um desses valores de entrada for re-executado, a funcao nao sera re-executada - ela apenas retorna o valor de saida memoizado
- decorator para log argumentos e horario num arquivo (append no arquivo) dado como argumento do decorator (ver o primer on decorators)