Minicurso de Python Aula 2 Raphael Lupchinski Marcelo Millani
Recapitulando Na última aula vimos a sintaxe básica de Python: Criar escopo utilizando : Identação baseada em 4 espaços Expressões matemáticas Variáveis Strings Indexação Listas Operadores booleanos If, For, While Funções
Continuando... Funções Para fazer com que uma função retorne um valor, basta utilizar return, seguido de rua lista de valores. Podemos fazer argumentos defult na definição de uma função. 1 def dividepordoisououtro(a,b=2): 2 return a/b Quais seriam os resultados de: >>> dividepordoisououtro(2) >>> dividepordoisououtro(10,5)
Continuando... Funções Para fazer com que uma função retorne um valor, basta utilizar return, seguido de rua lista de valores. Podemos fazer argumentos defult na definição de uma função. 1 def dividepordoisououtro(a,b=2): 2 return a/b Quais seriam os resultados de: >>> dividepordoisououtro(2) # 1 >>> dividepordoisououtro(10,5) # 2
Argumentos default Os valores default são configurados no momento de suas definições: >>> a = 5 >>> def func(param=a):... Print param >>> a = 20 >>> func() # quanto isso deveria retornar? É possível escolher o valor default na chamada da função: >>> func(param=20) 20
Funções lambda Python dá suporte para funções sem nome específico, conhecidas como função lambda Ficam fortemente atreladas às funções map(), reduce() e filter() >>> def f(x): return x**2 >>> f(8) 64 >>> g = lambda x: x**2 >>> g(8) 64
Docstrings Todos sabemos que documentação de código é fundamental. Python oferece uma ferramenta para facilitar o armazenamento de documentação. >>> def MinhaPotencia(a,b)... Essa função tem a seguinte propriedade:... Retorna o valor da exponenciação a^b.... return a**b >>> print MinhaPotencia(1,2). doc Essa função tem a seguinte propriedade: Retorna o valor da exponenciação a^b.
Mais sobre listas... Alguns comandos úteis pra se trabalhar com listas: lista.append(elemento) # insere elemento no final de lista. lista.extend(outralista) # insere todos os elementos de outralista no final de lista. lista.insert(i,elemento) # insere elemento no índice i da lista. lista.remove(elemento) # remove a primeira ocorrência de elemento na lista
Mais sobre listas... lista.pop(~i) # remove o último elemento de lista, ou remove o i-ésimo elemento. lista.index(elemento) # índice da primeiro ocorrência de elemento em lista. lista.count(elemento) # conta o número de repetições de elemento em lista lista.sort() # ordena os elementos de lista (podem existir tipos variados). (Essa é a prova de que Python é um martelo e tudo é prego! ) lista.reverse() # coloca todos os elementos na ordem reversa
filter(), map() e reduce() São funções bem úteis para se trabalhar com listas. filter(function,list) Filter utiliza uma função booleana (eg. a > 3) e filtra para uma nova lista somente os elementos que geraram true. >>> def f(x): return x % 2 == 0 and x % 3 == 0 >>> f = lambda x: x % 2 == 0 and x % 3 == 0 >>> filter(f, range(2,25)) [6, 12, 18, 24]
filter(), map() e reduce() map(function,list) Map itera sobre os elementos de list e aplica a cada um um deles function, gerando uma nova lista com os resultados. >>> def square(x): return x*x >>> g = lambda x: x*x >>> map(square, range(2,10)) >>> map(g,range(2,10)) [4, 9, 16, 25, 36, 49, 64, 81]
filter(), map() e reduce() reduce(function,list) Reduce aplica uma função nos 2 primeiros elementos de uma sequência. Na próxima iteração, são utilizados o terceiro elemento e o resultado anteriormente obtido, e assim por diante. >>> def add(x,y): return x+y >>> h = lambda x, y: x + y >>> reduce(add, range(10)) >>> reduce(h,range(10)) 45 Dada a utilidade dessa função, foi embutida na biblioteca padrão a função sum(lista).
Exercício Faça 2 programas que digam a média aritmética dos elementos de uma lista. Programa 1: fazer no estilo C (percorrer os elementos e calcular a média. Use for nesse caso). Programa 2: usar os açúcares sintáticos de Python (sum(), len(), etc...). Analise as diferenças de programar dos 2 modos.
List comprehensions Podemos, em alguma situação, querer criar uma lista a partir de outras listas ou regras. Essa sintaxe é familiar? {x x ϵ A ^ x > 0} # cria uma lista tal que os elementos estão em A e são maiores que zero. Em Python podemos fazer algo semelhante: list = [x for x in A if x > 0] # sendo A uma lista (um range(n) por exemplo)
Exercício Faça um programa que recebe como entrada uma lista de elementos pares (utilizando filter() ) e, usando list comprehension, gera uma nova lista com aqueles elementos que forem divisíveis por 3. Input: range(20) Output: [0, 6, 12, 18]
Deletando variáveis Basta usar a diretiva del. >>> a = [2, 5, 78, 12] >>> del a[1] >>> a [2, 78, 12] >>> del a[:] >>> a [] >>> del a # apaga a completamente >>> a NameError: name a is not defined
Conjuntos Python nos eferece suporte para trabalhar com sets. >>> a = set( computacao ) >>> b = set( computador ) >>> a #mostra os caracteres únicos em computacao set([ a, c, m, o, p, u, t ]) >>> b - a # caracteres em b e não em a set([ r, d ]) >>> a b # união >>> a & b # intersecção >>> a ^ b # união - intersecção
Dicionários É uma maneira prática de guardar informações associadas à chaves. Todo elemento do dicionário é composto por um par chave:valor. Suponha que tenhamos um dicinário de endereços para pessoas numa empresa: >>> adr = { Raphael : Rua A, Marcelo : Rua B } >>> adr[ Marcelo ] Rua B
Mais sobre dicionários Inserir um novo elemento: >>> dic[ newkey ] = newvalue Deletar um elemento: >>> del dic[ Key ] Mostrar o dicionário: >>> dic Mostrar as chaves do dicionário: >>> dic.keys() Testar a existência de uma entrada: >>> Key in dic
Módulos Chegaremos em situações onde muita coisa foi escrita no código e é necessário utilizar isso novamente num futuro. Para isso, salvamos nossos desenvolvimentos em arquivos.py e os chamamos de módulos. Módulos podem ser reutilizados na criação de novos scripts. Para importar um módulo, basta escrever no seu script: import meumódulo Para poder utilizar as funções criadas em outro módulo, use: from meumódulo import *
Arquivos Python também tem suporte para a leitura/escrita de arquivos: >>> f = open( /pasta/do/teste, w ) O primeiro argumento é o diretório do arquivo e o segundo é o método de abertura: Parâmetro Modo de Abertura r Leitura w Escrita (sobrescreve) a Escrita (concatenação) r+ Leitura/Escrita
Arquivos Algumas funções para o arquivo aberto: Comando f.read(~i) f.readline() f.readlines() f.write(string) f.close() Descrição A não ser quando não for especificado i, lê todo o arquivo. Lê uma linha do arquivo e atualiza o ponteiro pra próxima linha. Devolve uma lista com as linhas do arquivo. Escreve a string no arquivo. Fecha o arquivo para alterações.
Exercício Crie um arquivo de texto que contenha os seguintes números (um número por linha): 1;3;6;2;8;3;9;4;7 Modifique a sua função de cálculo da média (qualquer uma delas) de modo que se possa abrir o arquivo com estes números e calcular a sua média (4.77778) Lembre-se do f = open( arquivo, r ) e do f.readlines()
Estruturas Não existem em Python Mas existem...
Classes O que é muito melhor! Não entraremos em muito detalhes aqui (o objetivo não era ensinar OO, mas sim mostrar que existe suporte) Sintaxe: class MinhaClasse: atributo1 = 27 atributo2 = 42 def metodo1(self): return eis um método
Classes Para criar um objeto da nova classe: obj = MinhaClasse() Para acessar um atributo do objeto: Obj.atributo1 Para chamar um método da classe Obj.metodo1()
Obrigado pela participação! Raphael Lupchinski Marcelo Millani