python training #1, ed. 6

127

Upload: fabio-alexandre-spanhol

Post on 28-Jun-2015

297 views

Category:

Technology


3 download

DESCRIPTION

Minicurso ministrado no Meditec 5 (www.meditec.net.br).

TRANSCRIPT

Page 1: Python Training #1, ed. 6
Page 2: Python Training #1, ed. 6

$whoamiMaridoPai de um adolescente e 8 gatosOk, 5 cães também...

Apaixonado por programação (desde os 12)CinéfiloBacharel em Informática (Unioeste, 1999)Mestre em Ciência da Computação (UFSC, 2002)Doutorando UFPR (2014)Professor na UTFPR-TD (desde 2009)

Page 3: Python Training #1, ed. 6

BjarneStroustrup, C++ creator

Page 4: Python Training #1, ed. 6

é uma linguagem interpretada, interativa, funcional, orientada a objetos, dinamicamentetipada e com gerenciamentoautomático de memória

Similar, em certos aspectos, a Perl, Ruby, Scheme, Smalltalk e Tcl

Page 5: Python Training #1, ed. 6

Entre todas as linguagens que aprendi, Python é a que menos interfere entre mim e o problema. É a mais efetiva para traduzir pensamentos em ações.

Eric Raymond

Page 6: Python Training #1, ed. 6

Life is Better Without Braces.

Bruce Eckel

Page 7: Python Training #1, ed. 6

Python is everywhere at ILM. It's used to extend the capabilities of our applications, as well as providing the glue between them. Every CG image we create has involved Pythonsomewhere in the process.

Philip Peterson, Principal Engineer, Research & Development, Industrial Light & 

Magic

Page 8: Python Training #1, ed. 6

Python has been an important part of Googlesince the beginning, and remains so as the system grows and evolves. Today dozens of Google engineers use Python, and we're looking for more people with skills in this language.

Peter Norvik, director of search quality at Google, Inc

Page 9: Python Training #1, ed. 6

Course-Builder, Google

Page 10: Python Training #1, ed. 6

Comparação normalizada

Page 11: Python Training #1, ed. 6

http://www.tiobe.com

Page 12: Python Training #1, ed. 6
Page 13: Python Training #1, ed. 6

Guido van Rossum é referido pela comunidade python, desde 1995, como Benevolent Dictator For Life(BDFL)

De dezembro de 2005 a 2012 Guido trabalhou na Google, dedicando 50% do seu tempo com a linguagem

7/12/2012 passou a trabalhar na Dropboxwww.python.org/~guidoneopythonic.blogspot.com/

Page 14: Python Training #1, ed. 6

Não veio da cobra!"Over six years ago, in December

1989, I was looking for a "hobby" programming project that would keep me occupied during the week around Christmas. My office ... would be closed, but I had a home computer, and not much else on my hands. I decided to write an interpreter for the new scripting language I had been thinking about lately: a descendant of ABC that would appeal to Unix/C hackers. I chose Python as a working title for the project, being in a slightly irreverent mood (and a big fan of Monty Python´s Flying Circus)”.

Page 15: Python Training #1, ed. 6
Page 16: Python Training #1, ed. 6

NADA!

Python foi desenvolvido como um projeto open source, sem fins lucrativos e gerenciado pela PSF(Python Software Foundation)

Page 17: Python Training #1, ed. 6

Para obter o interpretador Python acessar http://www.python.org/download/ VersõesPython 2.7.6 foi liberada em 10 de novembro

de 2013

Python 3.4.0* foi liberada em 17 de março de 2014

Page 18: Python Training #1, ed. 6

http://www.python.org/about/success/GoogleNASAYahooInfoSeekMCI WorldcomIBM HigwayIndustrial Light and MagicAstraZenecaHoneywell...

Page 19: Python Training #1, ed. 6

Governo FederalPetrobrasSerproEmbratelGlobo.comStarOneConectivaCPqDAsyncHaxentUTFPR...

Page 20: Python Training #1, ed. 6

Vários projetos da comunidade Software Livre

BlenderLibreOfficeZope/PloneMoinMoinMailmanBitTorrentChandlerGimpPloneDjangoOpenERPinVesalius

Page 21: Python Training #1, ed. 6

Canivete suíçoWeb e Internet DatabaseGUIsCientífico e processamento numéricoEducaçãoProgramação de rede Construção e teste de softwareDesenvolvimento de jogos e renderização

3DOnde mais sua imaginação mandar!

Page 22: Python Training #1, ed. 6
Page 23: Python Training #1, ed. 6
Page 24: Python Training #1, ed. 6

Unix: HP-UX, Solaris ...Linux (frequentemente pré-instalada)Mac OSX (sempre pré-instalada)Windows: 9x, ME, 2K, XP, Vista, Seven

(ctypes, win32all)Apple iPhoneGoogle Android

Page 25: Python Training #1, ed. 6

SIM: Compilação Híbrida!

Como ficou “famoso” com Java, programas Pythonsão compilados, porém para uma linguagemintermediária, destinada a um interpretador

Isola Python de muitas das excentricidades dasmáquinas reais na qual ele roda

provê um nível de portabilidade

Page 26: Python Training #1, ed. 6

Prazer em lhe conhecer!Cython

onde existir um compilador C ISO/IEC 9899:1990Jython

máquina virtual JavaPyPy

Python implementado em PythonPython for .NET

[Brian Lloyd], IronPython (da M$)Python for DelphiLunaticPython

interoperando com LuaRuby/Python

em Ruby importar módulos Python)

Page 27: Python Training #1, ed. 6

De altíssimo nível e poderosaElegante, com sintaxe

simples e concisaFácil de aprender,

“cabe” no seu cérebro !Multiparadigma

Funcional, Procedural e Orientado a ObjetosPossui suporte nativo a

estruturas de dados complexas

Page 28: Python Training #1, ed. 6

Extensa biblioteca padrão

Um módulo para o que você precisar

sys, random, re, datetime, calendar, csv, os, webbrowser, string, urlib, Tkinter, codecs, pickle, types, array, mutex, queue, zlib, gzip, md5, thread, socket, email, xml.dom, locale, etc.

Page 29: Python Training #1, ed. 6
Page 30: Python Training #1, ed. 6

Código é muito mais lido que escrito!

Readability importa! (muito)

Python te ajuda a escrever código mais legível

Page 31: Python Training #1, ed. 6
Page 32: Python Training #1, ed. 6

Python é case sensitiveLinhas são delimitadas por enterTipagem é forte e dinâmica

Não há declaração de variáveis como em C, Java, Pascal,etc.

Você pode utilizar o interpretador em modointerativo ou seu IDE/editor favoritos

Page 33: Python Training #1, ed. 6
Page 34: Python Training #1, ed. 6

InúmerosGeanyVimAptanaKomodoNetBeansPyCharmPyDev (Eclipse)Wing IDEPyshieldSpyderMS-Visual StudioEtc.

Page 35: Python Training #1, ed. 6

Ninja IDE (Ninja Is Not Just Another IDE)

MultiplataformaEditor de código poderosoGerenciamento de ProjetosPluginshttp://ninja-ide.org/

Page 36: Python Training #1, ed. 6
Page 37: Python Training #1, ed. 6

Em Python, variáveis são referências a objetos

não guardam os objetos em sinão têm tipo, mas os objetos aos quais elas se

referem têm tipoSão criadas dinamicamente

Uma variável não pode ser utilizada em uma expressão sem ter sido inicializada

não existe “criação automática” de variáveis

Page 38: Python Training #1, ed. 6

Variáveis não são “caixas” com valoresVariáveis são “rótulos” colados em objetos

São criadas pela atribuiçãoOperador =

Page 39: Python Training #1, ed. 6

Variáveis são referências a objetos na memória

Page 40: Python Training #1, ed. 6

Atribuição não gera uma cópia do objetoUma referência (variável) pode ser liberadaUsando delNão existindo mais referências a um objeto, ele é removido da memória (garbage collector)

Page 41: Python Training #1, ed. 6

Programas maiores codificados em arquivos (scripts)

normalmente usando um IDEextensão py

O script pode ser executado diretamente da linha de comando do SO

python oi.py

...ou carregado para o interpretador interativo

>>> import oi

Page 42: Python Training #1, ed. 6

Módulos são arquivos que contêm qualquer estrutura python (classes, funções, variáveis, etc.) e podem ser importados nos programas

Quando importado pela primeira vez o módulo é compilado e um arquivo .pyc ou .pyo é gerado

Um módulo é um objeto singletonApenas uma instância é carregada em memória torna-se disponível globalmente para o programa

que fez a importação

Page 43: Python Training #1, ed. 6

Funções importantes são disponibilizadas em módulos da biblioteca padrão

Ex.: módulo math tem funções como sin, cos, exp e outrasUm módulo pode conter não só funções, mas

também variáveis ou classesEx.: math define a constante pi

Os módulos são localizados pelo interpretador pela lista de diretórios em PYTHONPATH(sys.path), que inclui o diretório atual

Page 44: Python Training #1, ed. 6

Para usar os elementos de um módulo, comando import

import modulofrom modulo import nome1,...,nomenfrom modulo import *

A importação ocorre apenas uma vez!

Para carregar um módulo novamente (que tenha sido alterado) pode-se usar a função reload

No python > 3.x é imp.reload

Page 45: Python Training #1, ed. 6

Exemplos

Page 46: Python Training #1, ed. 6

Se um programa pode ser executado isolado ou importado dentro de outro, como distinguir as duas situações?

O módulo principal de um programa tem a variável __name__ contendo “__main__”

Para executar um código apenas se o módulo for o principal e não quando ele for importado

Page 47: Python Training #1, ed. 6
Page 48: Python Training #1, ed. 6

Digitar help() no interpretador abre o help interativo

Use quit para sair

Page 49: Python Training #1, ed. 6

Python Enhancement Proposal

São documentos padronizados da comunidade Python

Uma PEP propõe um padrão, melhoria, funcionalidade, estrutura, explicações sobre funcionalidades, etc.

Veja a PEP #0http://www.python.org/dev/peps/pep-0000/

Page 50: Python Training #1, ed. 6

Um bloco inicia com :

A estrutura dos blocos é definida pelaindentação

A PEP #8 - Style Guide for Python Code - sugere4 espaços

Seja consistenteNão misturar tabulações com espaços!!!

Page 51: Python Training #1, ed. 6
Page 52: Python Training #1, ed. 6

A partir do caractere #, o interpretador ignora o restante do código até o final da linha

Isso não vale dentro de strings

Para várias linhas use asplas triplas (docstring)

Documentar funções, classes, módulos, etc.

Page 53: Python Training #1, ed. 6

Tipos básicosint = normalmente 32 bitslong = limitado ao tamanho da memóriaHá promoção automática de int para longDivisão de inteiros em python < 3 resulta sempre int

Page 54: Python Training #1, ed. 6

Também são tipos numéricos básicosfloat = ponto flutuante de 32 bitscomplex= para números complexos

Page 55: Python Training #1, ed. 6

Construtores ou funções de conversãoint (n)float (n)complex (n)abs (n)

Page 56: Python Training #1, ed. 6

Básicos+, -, *, /, **

Inteiros%, //

Bit a Bit&, |, ^, ~, >>, <<

Page 57: Python Training #1, ed. 6

Módulo math e outros

Page 58: Python Training #1, ed. 6

Representa o valor nuloEquivalente a False em operações booleanas

Aplicações típicasValor default em parâmetros de funçõesValor de retorno de funções que será descartadoComo void de C/C++

Page 59: Python Training #1, ed. 6

Constantes True e FalseOcorre conversão automática entre

tipos

Conversão explícita pode ser feita com bool(x)

Page 60: Python Training #1, ed. 6

Relacionais>, <, >=, <=, ==, !=, is, is notSempre retornam um bool

Lógicosand, or, not

Page 61: Python Training #1, ed. 6

str – Sequência de bytes, com a acentuaçãodependente de encoding

Delimitadas por aspas, apóstrofo ou três aspas outrês apóstrofos

Page 62: Python Training #1, ed. 6

Codificaçõesiso-8859-1: padrão ISO Latin-1iso-8859-15: idem, com símbolo € (Euro)cp1252: MS-Windows codepage 1252ISO Latin-1 aumentado com caracteres usados em editoração eletrônica (‘’ “” •)utf-8: Unicode Transformation Format. Unicode

codificado em 8 bits compatível com ASCII até o código 127

utiliza 2 bytes para caracteres não-ASCII padrão recomendado pelo W3C e está sendo adotado pela maioria dos sistemas

Page 63: Python Training #1, ed. 6

Não existe um tipo próprio para caractere, como o char de C

Um caractere é um string de comprimento 1A função chr pode ser usada para obter o caractere correspondente a um código Unicode e o reverso com ord

Page 64: Python Training #1, ed. 6

Caracteres Unicode também podem ser acessados pelo seu nome com scape \N{}

Page 65: Python Training #1, ed. 6

Constantes str ou unicode são interpretadas segundo a codificação declarada num comentário especial no início do arquivo .py

Nós (brasileiros) frequentemente lidamos com textos não ASCII!

Page 66: Python Training #1, ed. 6

Use caracteres de formatação, como na printf da linguagem C

%s, %d, %f são os mais comuns

Page 67: Python Training #1, ed. 6

Usando type

Page 68: Python Training #1, ed. 6

Usando type

Page 69: Python Training #1, ed. 6

Tuplas são sequênciasimutáveis

não é possível modificar as referências contidas na tupla

Tuplas constantes são representadas como sequências de itens entre parênteses

Page 70: Python Training #1, ed. 6

Tuplas são sequências imutáveisTuplas constantes são representadas como

sequências de itens entre parênteses

CUIDADO: em certos contextos os parênteses ao redor das tuplas podem ser omitidos!

Page 71: Python Training #1, ed. 6

Listas são coleções de itens heterogêneos que podem ser acessados sequencialmente ou indexados

São mutáveisConstantes lista delimitadas por colchetes []Acesso a índices inexistentes levanta exceção!

Page 72: Python Training #1, ed. 6
Page 73: Python Training #1, ed. 6

Facilmente você pode criar uma lista numérica comrange([inicio,] fim[, passo])

Retorna uma sequência numérica conforme os argumentos dados

Normalmente usada em laços for*Na verdade retorna um iterator, em Python >= 3.x

Page 74: Python Training #1, ed. 6

Os tipos string, lista, tupla, buffer são sequências

Coleção ordenada e iterável de itens

Operaçõess[i] = acessa um items[-i] = acessa um item pelo finals+z = concatenas*n = produz n cópias de s concatenadase in s = elemento e está em s?e not in s = elemento e não está em s?

Page 75: Python Training #1, ed. 6

Operações de slicings[a:b] cópia de a (inclusive) até b (exclusive)s[a:] cópia a partir de a (inclusive)s[:b] cópia até b (exclusive)s[:] cópia total de ss[a:b:n] cópia de n em n itens

Atribuição s[2:5] = [6,3,2,0]Aplicável somente em sequências mutáveis

Page 76: Python Training #1, ed. 6

Strings são sequências e seus itens individuais podem ser acessados

Contudo, são imutáveis

Page 77: Python Training #1, ed. 6

A inserção pode ser feita com slicing

Ou ainda

Page 78: Python Training #1, ed. 6

Dicionários são estruturas de dados queimplementam mapeamentos

coleções de pares chave:valor que podem ser recuperados pela chaveA chave pode ser qualquer imutável

Page 79: Python Training #1, ed. 6

O tipo set permite agrupar conjuntos de valores

Mutável e permite operações típicas

Page 80: Python Training #1, ed. 6

Entrada com input

Saída com print

Page 81: Python Training #1, ed. 6

ifif (expressao):

bloco[elif (expressao):

bloco][else:

bloco]

Page 82: Python Training #1, ed. 6

exemplo

Page 83: Python Training #1, ed. 6

forfor variavel in sequencia:

bloco[else:

bloco]while

while (expressao):bloco

[else:bloco]

Page 84: Python Training #1, ed. 6

Exemplo1

Exemplo2

Page 85: Python Training #1, ed. 6

Modularizam o códigoComando def inicia a definição de uma funçãoComando return marca o fim da execução da função

e define o resultado a ser devolvidoPode ser None

Page 86: Python Training #1, ed. 6

Exemplo

Page 87: Python Training #1, ed. 6
Page 88: Python Training #1, ed. 6
Page 89: Python Training #1, ed. 6

Ei, não vamos complicar!

Page 90: Python Training #1, ed. 6

Estourar a pilha de execução é “fácil”

E aí, tentou fat(1000)?

Page 91: Python Training #1, ed. 6

Mudando o tamanho da pilha de ativação

Page 92: Python Training #1, ed. 6

Funções que possuem a instrução yield são Generators

Retornam objetos iteratorsÉ mantida uma memória do último valor retornado

Page 93: Python Training #1, ed. 6
Page 94: Python Training #1, ed. 6

Classe file representam arquivos Use a função open (ou construtor file(), são

sinônimos)

abrir arquivo binário para leituraarq = file(‘imagem.png','rb')

abrir arquivo texto para escritaarq = open(‘log.txt','w')

abrir arquivo para acrescentar (append)arq = file(‘imagem.png','a')

Page 95: Python Training #1, ed. 6

Cuidado: arquivo é uma sequência de bytes!Deve ser interpretada por uma codificação de caracteres

Ex.: tentativa de ler um arquivo UTF-8 criado no MS-WindowsÉ assumida codificação padrão (do sistema): CP-1252

Page 96: Python Training #1, ed. 6

Boa prática: especificar a codificação na abertura!O padrão é dependente da plataforma

Page 97: Python Training #1, ed. 6

Criando um bitmap de 2x2 pixelsNão entraremos em detalhes (header, dib,

data, etc.) do formato bmpNÃO FAÇA isso em sã consciência!Existem bibliotecas especializadas para tratamento de imagens: PILLOW

Arquivo bmp de 70 bytes criado

Page 98: Python Training #1, ed. 6

Alterando o nosso bmp de 2x2 pixelsNÃO FAÇA isso em sã consciência!Existem bibliotecas especializadas para tratamento de imagens: PILLOW

Arquivo aberto para R/WPosicionado no byte 65Escritos 3 bytes

Page 99: Python Training #1, ed. 6

Operações de E/S são realizadas pelo SO

O módulo os possui diversas variáveis e funções queajudam um programa Python adequar-se ao SO

os.getcwd() o diretório atualos.chdir(dir) diretório atual para diros.sep caractere que separa componentes de um caminho('/' para Unix, '\\' para Windows) os.path.exists(path) diz se path é o nome de um arquivoexistente

Page 100: Python Training #1, ed. 6

Módulo CSV (Comma-Separated Values)

Page 101: Python Training #1, ed. 6

Bibliotecas nativas para compressãoBaterias gzip, bzip2, pkzip, etc.

Page 102: Python Training #1, ed. 6

Exceção é um objeto que é lançado(raised/thrown) quando ocorre uma situação inesperada

Esse objeto é capturado por um tratador de exceções que “sabe” como manipular essa situação

Page 103: Python Training #1, ed. 6

Considere o pseudocódigo

Execute uma tarefaSe a tarefa anterior não foi executadacorretamenteExecute o processamento de erro

Execute a próxima tarefaSe a tarefa anterior não foi executadacorretamenteExecute o processamento de erro

O que há de errado?

Page 104: Python Training #1, ed. 6

Mistura a lógica e o tratamento de erros!Pode tornar o programa difícil de ler/depurarTratamento de exceções remove o tratamento de

erros da ‘linha principal’ de execução do programaVantagens do Tratamento de ExceçõesUma exceção não pode ser ignorada, como ocorre

com um código de erroO código de processamento de erros é tratado a

parte do código normal do programaPermitem recuperar de situações problemáticasPermitem implementar sistemas mais robustos e

tolerantes a falhas

Page 105: Python Training #1, ed. 6

Em Python, tratadores de exceção (exceptionhandlers) são blocos na forma

try:suite1

except exceptions:suite2

else:suite3

Page 106: Python Training #1, ed. 6

Foco no “caminho feliz”

Page 107: Python Training #1, ed. 6

Cláusula finally

Page 108: Python Training #1, ed. 6

Lembra? Multiparadigma! Inclui Orientação a Objetos

Tudo em python é objeto. Mesmo!

Page 109: Python Training #1, ed. 6

Simplesmente defina a classe e use-a!Classe (class) é um tipo de dados especial que

define como construir objetos

Também armazena alguns dados que são compartilhados por todas as instâncias dessa classe

Instâncias são objetos criados segundo a definição da classe

Python não separa a interface da implementação da classe

Page 110: Python Training #1, ed. 6

Não se desespere!

para os métodos, defina funções dentro do escopo de class

Page 111: Python Training #1, ed. 6

A função __init__ serve como construtor

Nos métodos, o parâmetro self referencia a instância atual

NÃO É passado explicitamente

Page 112: Python Training #1, ed. 6

Não é necessário liberar objetos explicitamente

Esqueça free ou delete!

Coletor automático de lixo, lembra?

Page 113: Python Training #1, ed. 6

Isso funciona, mas com sotaque

Page 114: Python Training #1, ed. 6
Page 115: Python Training #1, ed. 6

Métodos especiais permitem implementar operadores

Têm nomes iniciando e finalizando com __

Page 116: Python Training #1, ed. 6
Page 117: Python Training #1, ed. 6

Herança, coleções, métodos de classe, métodos estáticos, atributos “privados”, mais propriedades, decoradores, coleções, etc.

Mas, ...

I´ll be back in #2!

Page 118: Python Training #1, ed. 6

Quão rápido roda meu código?

Em linha de comando, chamar o profilerpython –m profile arq.py

Page 119: Python Training #1, ed. 6

Quão rápido roda meu código?

Em linha de comando, chamar o debuggerpython –m pdb arq.py

Page 120: Python Training #1, ed. 6

TCL-TK é parte integrante, via tkinterDiversos outros bindings de frameworks

wxWidgetsQTGTKetc.

Page 121: Python Training #1, ed. 6
Page 122: Python Training #1, ed. 6

“List comprehensions”

Produz uma lista a partir de qualquer objeto iterávelSintaxe inspirada em Haskell

Page 123: Python Training #1, ed. 6
Page 124: Python Training #1, ed. 6
Page 125: Python Training #1, ed. 6

Inverter a ordem das cartasbaralho.reverse()

Tirar a carta do topobaralho.pop()

Adicionar 4 coringasbaralho.extend([‘Coringa’]*4)

Colocar em ordembaralho.sort()Pelo número de letras: baralho.sort(key=len)

Page 126: Python Training #1, ed. 6

Baterias: urllib e re

Page 127: Python Training #1, ed. 6