Aula 20

Python online

Python Tutorial

Standard library

OO in Python

class

class Pessoa:
   def setidade(self,x):
       if x >0 :
         self.idade=x

   def getidade(self):
        return self.idade

So da para definir os metodos. (Normalmente) não há a definição de atributos/campos/variávies

Há sempre o parâmetro self para os metodos, que indicam o objeto sobre o qual o método esta sendo executado

objetos

Atribuos/campos/variaveis dos objetos são sempre visiveis e modificaveis!! Nao ha atributos privados

x=Pessoa()

x.setidade(12)
x.getidade()

x.idade

x.idade=99

x.nome="jose"

Usualmente indica-se um atributo privado usando dois underscores (regra para programadores não para o ambiente de execução) __nome__

Construtor

Pessoa() cria um objeto, se existe isso chama o construtor __init__

class Pessoa:
   def __init__(self,idade,nome):
      if idade>0:
         self.idade=idade
      self.nome=nome

x = Pessoa(-45,"jose")

Herança

class Aluno(Pessoa):
   pass

a=Aluno()
isinstance(a,Aluno)
isinstance(a,Pessoa)

atributos de classe

class Pessoa:
   npernas=2

x=Pessoa()
y=Pessoa()

x.npernas
x.npernas=9
x.npernas
y.npernas
Pessoa.npernas
Pessoa.npernas=10
y.npernas
x.npernas

OO in python?

Usualmente nao se cria um monte de objetos.

Usualmente objetos sao uma interface para as bibliotecas

Python object model

https://docs.python.org/3/reference/datamodel.html

operator overloading; definir diferentes acoes para o mesmo operador

x[i] acesso em listas e dicionários

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

Pacotes externos - requer instalacao pip ou conda

A interface para os modulos é normalmente através de objetos.

Exemplo de https://docs.python.org/3/howto/urllib2.html#urllib-howto

import urllib.request
with urllib.request.urlopen('http://www.python.org/') as f:
    print(f.read(300))

urllib.request.urlopen('http://www.python.org/') retorna um objeto do tipo bytes que tem o método read.

sklearn para aprendizado de maquina: https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

classificador = SVC(parametro1=...) # seta os parametros
classificador.fit(dados)  # treina
resultado = classificador.predict(dados_novos) # usa nos dados novos

Mas nem sempre - todas as funções em math e algumas no scipy são funções e não objetos/métodos

Programação funcional

funcoes anônimas

lambda mas a funcao so pode ter 1 linha

lambda x : x > 0 

map, filter

map(lambda x : x+3, [4,5,6,7])

filter(lambda x: x>0, [4,-5,6,-7])

mas use o list comprehension em vez de map+filter

fold (reduce)

foldl:

from functools import reduce

reduce(combinacao, lista, inicial)

funções que recebem funções 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]

Soluções 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

modulo operator

x[i] ou x['chave'] ou x.chave podem ser convertidos em funções para o argumento x