Python Training #1 ed.6

383 visualizações

Publicada em

Minicurso ministrado na UTFPR-Toledo, 12/11/2015, durante a I SAED - Semana Acadêmica de Engenharia e Tecnologia (https://saetutfpr.wordpress.com/)

Publicada em: Software
2 comentários
2 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
383
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
15
Comentários
2
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Python Training #1 ed.6

  1. 1. $whoami Marido Pai de um adolescente e 9 gatos Ok, 9 cães também... Apaixonado por programação (desde os 12) Cinéfilo Bacharel em Informática (Unioeste, 1999) Mestre em Ciência da Computação (UFSC, 2002) Doutorando UFPR (2014) Professor na UTFPR-TD (desde 2009)
  2. 2. Bjarne Stroustrup, C++ creator
  3. 3. é uma linguagem interpretada, interativa, funcional, orientada a objetos, dinamicamente tipada e com gerenciamento automático de memória Similar, em certos aspectos, a Perl, Ruby, Scheme, Smalltalk e Tcl
  4. 4. 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
  5. 5. Life is Better Without Braces. Bruce Eckel
  6. 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 Python somewhere in the process. Philip Peterson, Principal Engineer, Research &  Development, Industrial Light & Magic
  7. 7. Python has been an important part of Google since 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
  8. 8. http://www.tiobe.com
  9. 9. 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 jan/2013 passou a trabalhar na Dropbox www.python.org/~guido neopythonic.blogspot.com/
  10. 10. 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)”.
  11. 11. NADA! Python foi desenvolvido como um projeto open source, sem fins lucrativos e gerenciado pela PSF (Python Software Foundation)
  12. 12. Para obter o interpretador Python acessar http://www.python.org/download/ Versões Python 2.7.10 foi liberada em 23 de maio de 2015 Python 3.5.0* foi liberada em 13 de setembro de 2015
  13. 13. http://www.python.org/about/success/ Google NASA Yahoo InfoSeek MCI Worldcom IBM Higway Industrial Light and Magic AstraZeneca Honeywell ...
  14. 14. Governo Federal Petrobras Serpro Embratel Globo.com StarOne Conectiva CPqD Async Haxent UTFPR ...
  15. 15. Vários projetos da comunidade Software Livre Blender LibreOffice Zope/Plone MoinMoin Mailman BitTorrent Chandler Gimp Plone Django OpenERP inVesalius
  16. 16. Canivete suíço Web e Internet Database GUIs Científico e processamento numérico Educação Programação de rede Construção e teste de software Desenvolvimento de jogos e renderização 3D Onde mais sua imaginação mandar!
  17. 17. Unix: HP-UX, Solaris ... Linux (frequentemente pré-instalada) Mac OSX (sempre pré-instalada) Windows: 9x, ME, 2K, XP, Vista, Seven (ctypes, win32all) Apple iPhone Google Android
  18. 18. SIM: Compilação Híbrida! Como ficou “famoso” com Java, programas Python são compilados, porém para uma linguagem intermediária, destinada a um interpretador Isola Python de muitas das excentricidades das máquinas reais na qual ele roda provê um nível de portabilidade
  19. 19. Prazer em lhe conhecer! Cython onde existir um compilador C ISO/IEC 9899:1990 Jython máquina virtual Java PyPy Python implementado em Python Python for .NET [Brian Lloyd], IronPython (da M$) Python for Delphi LunaticPython interoperando com Lua Ruby/Python em Ruby importar módulos Python)
  20. 20. De altíssimo nível e poderosa Elegante, com sintaxe simples e concisa Fácil de aprender, “cabe” no seu cérebro ! Multiparadigma Funcional, Procedural e Orientado a Objetos Possui suporte nativo a estruturas de dados complexas
  21. 21. 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.
  22. 22. Código é muito mais lido que escrito! Readability importa! (muito) Python te ajuda a escrever código mais legível
  23. 23. Python é case sensitive Linhas são delimitadas por enter Tipagem é forte e dinâmica Não há declaração de variáveis como em C, Java, Pascal, etc. Você pode utilizar o interpretador em modo interativo ou seu IDE/editor favoritos
  24. 24. Inúmeros Geany Vim Aptana Komodo NetBeans PyCharm PyDev (Eclipse) Wing IDE Pyshield Spyder MS-Visual Studio Etc.
  25. 25. Ninja IDE (Ninja Is Not Just Another IDE) Multiplataforma Editor de código poderoso Gerenciamento de Projetos Plugins http://ninja-ide.org/
  26. 26. Em Python, variáveis são referências a objetos não guardam os objetos em si não têm tipo, mas os objetos aos quais elas se referem têm tipo Sã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
  27. 27. Variáveis não são “caixas” com valores Variáveis são “rótulos” colados em objetos São criadas pela atribuição Operador =
  28. 28. Variáveis são referências a objetos na memória
  29. 29. Atribuição não gera uma cópia do objeto Uma referência (variável) pode ser liberada Usando del Não existindo mais referências a um objeto, ele é removido da memória (garbage collector)
  30. 30. Programas maiores codificados em arquivos (scripts) normalmente usando um IDE extensão py O script pode ser executado diretamente da linha de comando do SO python hellow.py ...ou carregado para o interpretador interativo >>> import hellow
  31. 31. 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 singleton Apenas uma instância é carregada em memória torna-se disponível globalmente para o programa que fez a importação
  32. 32. 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 outras Um módulo pode conter não só funções, mas também variáveis ou classes Ex.: 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
  33. 33. Para usar os elementos de um módulo, comando import import modulo from modulo import nome1,...,nomen from 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
  34. 34. Exemplos
  35. 35. 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
  36. 36. Digitar help() no interpretador abre o help interativo Use quit para sair
  37. 37. 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 #0 http://www.python.org/dev/peps/pep-0000/
  38. 38. Um bloco inicia com : A estrutura dos blocos é definida pela indentação A PEP #8 - Style Guide for Python Code - sugere 4 espaços Seja consistente Não misturar tabulações com espaços!!!
  39. 39. 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.
  40. 40. Tipos básicos int = normalmente 32 bits long = limitado ao tamanho da memória Há promoção automática de int para long Divisão de inteiros em python < 3 resulta sempre int
  41. 41. Também são tipos numéricos básicos float = ponto flutuante de 32 bits complex= para números complexos
  42. 42. Construtores ou funções de conversão int (n) float (n) complex (n) abs (n)
  43. 43. Básicos +, -, *, /, ** Inteiros %, // Bit a Bit &, |, ^, ~, >>, <<
  44. 44. Módulo math e outros
  45. 45. Representa o valor nulo Equivalente a False em operações booleanas Aplicações típicas Valor default em parâmetros de funções Valor de retorno de funções que será descartado Como void de C/C++
  46. 46. Constantes True e False Ocorre conversão automática entre tipos Conversão explícita pode ser feita com bool(x)
  47. 47. Relacionais >, <, >=, <=, ==, !=, is, is not Sempre retornam um bool Lógicos and, or, not
  48. 48. str – Sequência de bytes, com a acentuação dependente de encoding Delimitadas por aspas, apóstrofo ou três aspas ou três apóstrofos
  49. 49. Codificações iso-8859-1: padrão ISO Latin-1 iso-8859-15: idem, com símbolo € (Euro) cp1252: MS-Windows codepage 1252 ISO 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
  50. 50. Não existe um tipo próprio para caractere, como o char de C Um caractere é um string de comprimento 1 A função chr pode ser usada para obter o caractere correspondente a um código Unicode e o reverso com ord
  51. 51. Caracteres Unicode também podem ser acessados pelo seu nome com scape N{}
  52. 52. 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!
  53. 53. Use caracteres de formatação, como na printf da linguagem C %s, %d, %f são os mais comuns
  54. 54. Usando type
  55. 55. Usando type
  56. 56. Tuplas são sequências não é possível modificar as referências contidas na tupla Tuplas constantes são representadas como sequências de itens entre parênteses
  57. 57. Tuplas são sequências imutáveis Tuplas 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!
  58. 58. Listas são coleções de itens heterogêneos que podem ser acessados sequencialmente ou indexados São mutáveis Constantes lista delimitadas por colchetes [] Acesso a índices inexistentes levanta exceção!
  59. 59. Facilmente você pode criar uma lista numérica com range([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
  60. 60. Os tipos string, lista, tupla, buffer são sequências Coleção ordenada e iterável de itens Operações s[i] = acessa um item s[-i] = acessa um item pelo final s+z = concatena s*n = produz n cópias de s concatenadas e in s = elemento e está em s? e not in s = elemento e não está em s?
  61. 61. Operações de slicing s[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 s s[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
  62. 62. Strings são sequências e seus itens individuais podem ser acessados Contudo, são imutáveis
  63. 63. A inserção pode ser feita com slicing Ou ainda
  64. 64. Dicionários são estruturas de dados que implementam mapeamentos coleções de pares chave:valor que podem ser recuperados pela chave A chave pode ser qualquer imutável
  65. 65. O tipo set permite agrupar conjuntos de valores Mutável e permite operações típicas
  66. 66. Entrada com input Saída com print
  67. 67. if if (expressao): bloco [elif (expressao): bloco] [else: bloco]
  68. 68. exemplo
  69. 69. for for variavel in sequencia: bloco [else: bloco] while while (expressao): bloco [else: bloco]
  70. 70. Exemplo1 Exemplo2
  71. 71. Modularizam o código Comando def inicia a definição de uma função Comando return marca o fim da execução da função e define o resultado a ser devolvido Pode ser None
  72. 72. Exemplo
  73. 73. Ei, não vamos complicar!
  74. 74. Estourar a pilha de execução é “fácil” E aí, tentou fat(1000)?
  75. 75. Mudando o tamanho da pilha de ativação
  76. 76. Funções que possuem a instrução yield são Generators Retornam objetos iterators É mantida uma memória do último valor retornado
  77. 77. Classe file representam arquivos Use a função open (ou construtor file(), são sinônimos) abrir arquivo binário para leitura arq = file(‘imagem.png','rb') abrir arquivo texto para escrita arq = open(‘log.txt','w') abrir arquivo para acrescentar (append) arq = file(‘imagem.png','a')
  78. 78. 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
  79. 79. Boa prática: especificar a codificação na abertura! O padrão é dependente da plataforma
  80. 80. Criando um bitmap de 2x2 pixels Não entraremos em detalhes (header, dib, data, etc.) do formato bmp NÃO FAÇA isso em sã consciência! Existem bibliotecas especializadas para tratamento de imagens: PILLOW Arquivo bmp de 70 bytes criado
  81. 81. Alterando o nosso bmp de 2x2 pixels NÃO FAÇA isso em sã consciência! Existem bibliotecas especializadas para tratamento de imagens: PILLOW Arquivo aberto para R/W Posicionado no byte 65 Escritos 3 bytes
  82. 82. Operações de E/S são realizadas pelo SO O módulo os possui diversas variáveis e funções que ajudam um programa Python adequar-se ao SO os.getcwd() o diretório atual os.chdir(dir) diretório atual para dir os.sep caractere que separa componentes de um caminho ('/' para Unix, '' para Windows) os.path.exists(path) diz se path é o nome de um arquivo existente
  83. 83. Módulo CSV (Comma-Separated Values)
  84. 84. Bibliotecas nativas para compressão Baterias gzip, bzip2, pkzip, etc.
  85. 85. 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
  86. 86. Considere o pseudocódigo Execute uma tarefa Se a tarefa anterior não foi executada corretamente Execute o processamento de erro Execute a próxima tarefa Se a tarefa anterior não foi executada corretamente Execute o processamento de erro O que há de errado?
  87. 87. Mistura a lógica e o tratamento de erros! Pode tornar o programa difícil de ler/depurar Tratamento de exceções remove o tratamento de erros da ‘linha principal’ de execução do programa Vantagens do Tratamento de Exceções Uma exceção não pode ser ignorada, como ocorre com um código de erro O código de processamento de erros é tratado a parte do código normal do programa Permitem recuperar de situações problemáticas Permitem implementar sistemas mais robustos e tolerantes a falhas
  88. 88. Em Python, tratadores de exceção (exception handlers) são blocos na forma try: suite1 except exceptions: suite2 else: suite3
  89. 89. Foco no “caminho feliz”
  90. 90. Cláusula finally
  91. 91. Lembra? Multiparadigma! Inclui Orientação a Objetos Tudo em python é objeto. Mesmo!
  92. 92. 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
  93. 93. Não se desespere! para os métodos, defina funções dentro do escopo de class
  94. 94. A função __init__ serve como construtor Nos métodos, o parâmetro self referencia a instância atual NÃO é passado explicitamente
  95. 95. Não é necessário liberar objetos explicitamente Esqueça free ou delete! Coletor automático de lixo, lembra?
  96. 96. Isso funciona, mas com sotaque
  97. 97. Métodos especiais permitem implementar operadores Têm nomes iniciando e finalizando com _ _
  98. 98. 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!
  99. 99. Quão rápido roda meu código? Em linha de comando, chamar o profiler python –m profile arq.py
  100. 100. Quão rápido roda meu código? Em linha de comando, chamar o debugger python –m pdb arq.py
  101. 101. TCL-TK é parte integrante, via tkinter Diversos outros bindings de frameworks wxWidgets QT GTK etc.
  102. 102. “List comprehensions” Produz uma lista a partir de qualquer objeto iterável Sintaxe inspirada em Haskell
  103. 103. Inverter a ordem das cartas baralho.reverse() Tirar a carta do topo baralho.pop() Adicionar 4 coringas baralho.extend([‘Coringa’]*4) Colocar em ordem baralho.sort() Pelo número de letras: baralho.sort(key=len)
  104. 104. Baterias: urllib e re

×