Python Training #1, ed. 6
-
Upload
fabio-alexandre-spanhol -
Category
Technology
-
view
294 -
download
3
description
Transcript of 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)
BjarneStroustrup, C++ creator
é 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
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
Life is Better Without Braces.
Bruce Eckel
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
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
Course-Builder, Google
Comparação normalizada
http://www.tiobe.com
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/
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)”.
NADA!
Python foi desenvolvido como um projeto open source, sem fins lucrativos e gerenciado pela PSF(Python Software Foundation)
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
http://www.python.org/about/success/GoogleNASAYahooInfoSeekMCI WorldcomIBM HigwayIndustrial Light and MagicAstraZenecaHoneywell...
Governo FederalPetrobrasSerproEmbratelGlobo.comStarOneConectivaCPqDAsyncHaxentUTFPR...
Vários projetos da comunidade Software Livre
BlenderLibreOfficeZope/PloneMoinMoinMailmanBitTorrentChandlerGimpPloneDjangoOpenERPinVesalius
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!
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
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
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)
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
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.
Código é muito mais lido que escrito!
Readability importa! (muito)
Python te ajuda a escrever código mais legível
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
InúmerosGeanyVimAptanaKomodoNetBeansPyCharmPyDev (Eclipse)Wing IDEPyshieldSpyderMS-Visual StudioEtc.
Ninja IDE (Ninja Is Not Just Another IDE)
MultiplataformaEditor de código poderosoGerenciamento de ProjetosPluginshttp://ninja-ide.org/
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
Variáveis não são “caixas” com valoresVariáveis são “rótulos” colados em objetos
São criadas pela atribuiçãoOperador =
Variáveis são referências a objetos na memória
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)
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
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
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
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
Exemplos
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
Digitar help() no interpretador abre o help interativo
Use quit para sair
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/
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!!!
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.
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
Também são tipos numéricos básicosfloat = ponto flutuante de 32 bitscomplex= para números complexos
Construtores ou funções de conversãoint (n)float (n)complex (n)abs (n)
Básicos+, -, *, /, **
Inteiros%, //
Bit a Bit&, |, ^, ~, >>, <<
Módulo math e outros
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++
Constantes True e FalseOcorre conversão automática entre
tipos
Conversão explícita pode ser feita com bool(x)
Relacionais>, <, >=, <=, ==, !=, is, is notSempre retornam um bool
Lógicosand, or, not
str – Sequência de bytes, com a acentuaçãodependente de encoding
Delimitadas por aspas, apóstrofo ou três aspas outrês apóstrofos
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
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
Caracteres Unicode também podem ser acessados pelo seu nome com scape \N{}
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!
Use caracteres de formatação, como na printf da linguagem C
%s, %d, %f são os mais comuns
Usando type
Usando type
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
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!
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!
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
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?
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
Strings são sequências e seus itens individuais podem ser acessados
Contudo, são imutáveis
A inserção pode ser feita com slicing
Ou ainda
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
O tipo set permite agrupar conjuntos de valores
Mutável e permite operações típicas
Entrada com input
Saída com print
ifif (expressao):
bloco[elif (expressao):
bloco][else:
bloco]
exemplo
forfor variavel in sequencia:
bloco[else:
bloco]while
while (expressao):bloco
[else:bloco]
Exemplo1
Exemplo2
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
Exemplo
Ei, não vamos complicar!
Estourar a pilha de execução é “fácil”
E aí, tentou fat(1000)?
Mudando o tamanho da pilha de ativação
Funções que possuem a instrução yield são Generators
Retornam objetos iteratorsÉ mantida uma memória do último valor retornado
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')
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
Boa prática: especificar a codificação na abertura!O padrão é dependente da plataforma
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
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
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
Módulo CSV (Comma-Separated Values)
Bibliotecas nativas para compressãoBaterias gzip, bzip2, pkzip, etc.
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
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?
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
Em Python, tratadores de exceção (exceptionhandlers) são blocos na forma
try:suite1
except exceptions:suite2
else:suite3
Foco no “caminho feliz”
Cláusula finally
Lembra? Multiparadigma! Inclui Orientação a Objetos
Tudo em python é objeto. Mesmo!
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
Não se desespere!
para os métodos, defina funções dentro do escopo de class
A função __init__ serve como construtor
Nos métodos, o parâmetro self referencia a instância atual
NÃO É passado explicitamente
Não é necessário liberar objetos explicitamente
Esqueça free ou delete!
Coletor automático de lixo, lembra?
Isso funciona, mas com sotaque
Métodos especiais permitem implementar operadores
Têm nomes iniciando e finalizando com __
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!
Quão rápido roda meu código?
Em linha de comando, chamar o profilerpython –m profile arq.py
Quão rápido roda meu código?
Em linha de comando, chamar o debuggerpython –m pdb arq.py
TCL-TK é parte integrante, via tkinterDiversos outros bindings de frameworks
wxWidgetsQTGTKetc.
“List comprehensions”
Produz uma lista a partir de qualquer objeto iterávelSintaxe inspirada em Haskell
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)
Baterias: urllib e re