Pymordida0 Semana de computação da SOCIESC - 2008/10

Embed Size (px)

DESCRIPTION

Slides do minicurso de Python ministrado na Semana de computação da SOCIESC em outubro de 2008.

Citation preview

  • 1. Python: a primeira mordida Marco Andr Lopes Mendes [email_address]

2. Crditos Esses conjunto de slides foi desenvolvido a partir do material de: Luciano Ramalho[email_address] 3. Em vez deHello World... fromdatetimeimportdatetime fromtimeimportsleep whileTrue:# rodar para sempre hora = datetime.now() printhora.strftime( '%H:%M:%S' )sleep(1)# aguardar 1 segundo 4. Blocos por endentao

    • fori in range(1,11) :
    • j = i*i
    • printi, j
    • print'FIM'

dois-pontos marca o incio do bloco retorno ao nvel anterior deindentao marca o final do bloco indentao dentro do bloco deve ser constante* * por conveno, usa-se 4 espaos por nvel (mas basta ser consistente) 5. Blocos

  • Todos os comandos que aceitam blocos:
  • Se o bloco tem apenas um comando, pode-se escrever tudo em uma linha:
  • if/elif/else
  • for/else
  • while/else
  • try/except
  • try/finally
  • class
  • def
    • ifn < 0:print 'Valor invlido'

6. Comentrios

  • O smbolo#indica que o texto partir daquele ponto e at o final da linha deve ser ignorado pelo interpretadorpython
    • exceto quando # aparece em uma string
  • Para comentrios de vrias linhas, usa-se trs aspas simples ou duplas (isso cria uma doc string e no ignorada pelopython , mas usada para documentar)
    • """ Minha terra tem palmeiras,
    • Onde canta o Sabi;
    • As aves, que aqui gorjeiam,
    • No gorjeiam como l. """

7. Tipos de dados bsicos

  • Nmeros:int, long, float, complex
  • Strings:str e unicode
  • Listas e tuplas:list, tuple
  • Dicionrios:dict
  • Arquivos:file
  • Booleanos:bool (True, False)
  • Conjuntos:set, frozenset
  • None

8. Nmeros inteiros

  • int : usualmente inteiros de 32 bits
  • long : alcance limitado apenas pela memria
  • ATENO:a diviso entreinteiros em Python < 3.0 sempreretornaoutro inteiro
  • Python promovedeint paralong automaticamente
    • >>> 1 / 2
    • 0
    • >>> 1. / 2
    • 0.5
    • >>> 2**30 + (2**30-1)
    • 2147483647
    • >>> 2**31
    • 2147483648L

9. Outros nmeros

  • float : ponto-flutuante de 32 bits
  • complex : nmero complexo
  • Construtores oufunes de converso:
    • int(a)
    • long(b)
    • float(c)
    • complex(d)
    • abs(e)
    • >>> c = 4 + 3j
    • >>> abs(c)
    • 5.0
    • >>> c.real
    • 4.0
    • >>> c.imag
    • 3.0

10. Operadores numricos

  • Aritmticos
    • bsicos:+ - * / **(o ltimo: potenciao)
    • aritmtica de inteiros:% //(resto e diviso)
  • Bit a bit:
    • & | ^ ~ >> >> bool(3)
      • True
      • >>> bool('0')
      • True
      • >>> bool([[]])
      • True
      • >>> bool(0)
      • False
      • >>> bool('')
      • False
      • >>> bool([])
      • False

12. Operadores booleanos

  • Operadores relacionais:
    • ==!=>>=> fruta = 'ma'
    • >>> fruta
    • 'maxc3xa7xc3xa3'
    • >>> print fruta
    • ma
    • >>> print repr(fruta)
    • 'maxc3xa7xc3xa3'
    • >>> print str(fruta)
    • ma
    • >>> len(fruta)
    • 6

15. Strings unicode

  • Padro universal, compatvel com todos os idiomas existentes (portugus, chins, grego, hndi, rabe, suali etc.)
  • Cada caractere representado pordois bytes
  • Utilize o prefixou para denotar umaconstante unicode:u'ma'
    • >>> fruta = u'ma'
    • >>> fruta
    • u'maxe7xe3'
    • >>> print fruta
    • ma
    • >>> len(fruta)
    • 4

16. Codificao em scripts

  • As constantes str ou unicode so interpretadas segundo a codificao declarada num comentrio especial no incio do arquivo .py:
    • #!/usr/bin/env python
    • # coding:utf-8

17. Como gerar strings com variveis embutidas

  • Operador de interpolao:f % tupla
  • Tipos de converso mais comuns:
      • %s ,%f ,%d : string, float, inteiro decimal
  • Aprendendo a aprender:
    • Google:Python String Formatting Operations
    • >>> m ='Euro'
    • >>> t =2.7383
    • >>> f = 'O%sest cotado a R$%0.2f .'%( m , t )
    • >>> print f
    • OEuroest cotado a R$2.74 .

18. Algumas funes com strings

  • chr(n) :retorna uma string com um caractere de 8-bits cujo cdigo n
  • unichr(n) :retorna uma string com um caractere Unicodecujo cdigo n
  • ord(c) : retorna o cdigo numrico do caracterec(pode ser Unicode)
  • repr(x) : converso de objeto para sua representao explcita emPython
  • len(s) : nmero de caracteres da string

19. Alguns mtodos de strings

  • s.strip()
    • retira os brancos (espaos, tabs e newlines) da frente e de trs des(+ parmetros)
    • rstripelstripretiram direita e esquerda
  • s.upper(), s.lower(), s.capitalize(), s.title()
    • converte todas maisculas, todas minsculas, primeira maiscula por palavra, primeira maiscula da string
  • s.isdigit(), s.isalnum(), s.islower()...
    • testa se a string contm somente dgitos, ou somente dgitos e letras ou s minsculas

20. Buscando substrings

  • sub in s
    • s contm sub ?
  • s.startswith(sub), s.endswith(sub)
    • scomea ou termina comsub ?
  • s.find(sub), s.index(sub)
    • posio desubems(sesubno existe ems ,findretorna -1,indexsinalizaValueError )
    • rfinderindexcomeam pela direita
  • s.replace(sub1, sub2)
    • substitui as ocorrncias desub1porsub2

21. Aprendendo a aprender

  • Use o interpretador interativo!
  • Determinar o tipo de um objeto:
    • type(obj)
  • Ver docs de uma classe ou comando
    • help(list)
  • Obter uma lista de (quase) todos os atributos de um objeto
    • dir(list)
  • Listar smbolos do escopo corrente
    • dir()

22. Listas

  • Listas so colees de itens heterogneos que podem ser acessados sequencialmente ou diretamente atravs de um ndice numrico.
  • Constantes do tipo lista so delimitadas por colchetes[] .
    • a = []
    • b = [1,10,7,5]
    • c = ['casa',43,b,[9,8,7],u'coisa']

23. Listas

  • O mtodolista.append(i) usado para colocar um novo itemi na lista.
  • O mtodolista.extend(l) inclui todos os itens delno final da lista. O resultado o mesmo da expresso abaixo, s que mais eficiente pois evita copiar todos os itens da lista:
  • Funo embutidalen()retorna o nmero de itens da lista:
    • len(a), len(b), len(c) # 0, 4, ?
        • lista += l2

24. Listas

  • O mtodolista.sort()ordena os itens de forma ascendente.
  • O mtodolista.reverse()inverte a ordem dos itens dentro da prpria lista.
  • Ambos devolvemNone .
  • A funo embutidasorted(l)devolve uma lista com os itens de uma lista ou sequncia qualquer ordenados
  • A funo embutidareversed(l) devolve um iterador para percorrer a sequncia em ordem inversa (do ltimo para o primeiro item).

25. Operaes com itens de listas

  • Atribuio:
    • lista[5] = 123
  • Outros mtodos da classelist :
    • lista.insert(posicao, elemento)
    • lista.pop()# +params: ver doc
    • lista.index(elemento) # +params: ver doc
    • lista.remove(elemento)
  • Remoo do item:
    • del lista[3]

26. Uma funo para gerar listas

  • range([inicio,] fim[, passo])
    • Retorna uma progresso aritmtica de acordo com os argumentos fornecidos
  • Exemplos:
    • range(8)# [0,1,2,3,4,5,6,7]
    • range(1,7)# [1,2,3,4,5,6]
    • range(1,8,3) # [1,4,7]

27. Expresses para gerar listas

  • List comprehensions ou abrangncias de listas
  • Produz uma lista a partir de qualquer objeto itervel
  • Economizam loops explcitos

28. Abrangncia de listas

  • Sintaxe emprestada da linguagem funcional Haskell
  • Processar todos os elementos:
    • l = [1,-2,3,-1,-3,4]
    • l2 = [n*10 for n in l]

29.

  • Filtrar alguns elementos:
    • l3 = [n for n in l if n > 0]
  • Processar e filtrar
    • l4 = [n*10 for n in l if n > 0]

Abrangncia de listas 30. Produto cartesiano

  • Usando dois ou mais comandosfordentro de uma list comprehension

>>> qtds = [2,6,12,24] >>> frutas = ['abacaxis', 'bananas', 'caquis'] >>> [(q,f) for q in qtds for f in frutas] [(2, 'abacaxis'), (2, 'bananas'), (2, 'caquis'),(6, 'abacaxis'), (6, 'bananas'), (6, 'caquis'),(12,'abacaxis'), (12,'bananas'), (12,'caquis'),(24,'abacaxis'), (24,'bananas'), (24,'caquis')] 31. Produto cartesiano (2) >>> naipes = 'copas ouros espadas paus'.split() >>> cartas = 'A 2 3 4 5 6 7 8 9 10 J Q K'.split() >>> baralho = [(c, n) for n in naipes for c in cartas] >>> baralho [('A', 'copas'), ('2', 'copas'), ('3', 'copas'), ('4', 'copas'), ('5', 'copas'), ('6', 'copas'), ('7', 'copas'), ('8', 'copas'),('9', 'copas'), ('10', 'copas'), ('J', 'copas'), ('Q', 'copas'),('K', 'copas'), ('A', 'ouros'), ('2', 'ouros'), ('3', 'ouros'),('4', 'ouros'), ('5', 'ouros'), ('6', 'ouros'), ('7', 'ouros'),('8', 'ouros'), ('9', 'ouros'), ('10', 'ouros'), ('J', 'ouros'),('Q', 'ouros'), ('K', 'ouros'), ('A', 'espadas'), ('2', 'espadas'),('3', 'espadas'), ('4', 'espadas'), ('5', 'espadas'), ('6', 'espadas'), ('7', 'espadas'), ('8', 'espadas'), ('9', 'espadas'), ('10', 'espadas'), ('J', 'espadas'),('Q', 'espadas'), ('K', 'espadas'), ('A', 'paus'), ('2', 'paus'),('3', 'paus'), ('4', 'paus'), ('5', 'paus'), ('6', 'paus'),('7', 'paus'), ('8', 'paus'), ('9', 'paus'), ('10', 'paus'),('J', 'paus'), ('Q', 'paus'), ('K', 'paus')] >>> len(baralho) 52 32. Tuplas

  • Tuplas so sequncias imutveis
    • no possvel modificar as referncias contidas na tupla
  • Tuplas constantes so representadas como sequncias de itens entre parnteses
    • em certos contextos os parnteses em redor das tuplas podem ser omitidos
        • >>> t1 = 1, 3, 5, 7
        • >>> t1
        • (1, 3, 5, 7)
        • a, b = b, a

33. Converses entre listas e strings

  • s.split([sep[,max]])
    • retorna uma lista de strings, quebrando snos brancos ou no separador fornecido
    • maxlimita o nmero de quebras
  • s.join(l)
    • retorna todas as strings contidas na lista l"coladas" com a strings( comum quesseja uma string vazia)
  • list(s)
    • retornascomo uma lista de caracteres
        • ''.join(l)
        • s.split(';')
        • list('python')

34. Tuplas

  • Atribuies mltiplas utilizam tuplas
    • #uma lista de duplas
    • posicoes = [(1,2),(2,2),(5,2),(0,3)]
    • #um jeito de percorrer
    • for pos in posicoes:
    • i, j = pos
    • print i, j
    • #outro jeito de percorrer
    • for i, j in posicoes:
    • print i, j

35. Operaes com sequncias

  • Sequncias so colees ordenadas
    • nativamente: strings, listas, tuplas, buffers
  • Operadores:
    • s[i] acesso a um item
    • s[-i] acesso a um item pelo final
    • s+z concatenao
    • s*n ncpias desconcatenadas
    • i in s teste de incluso
    • i not in s teste de incluso negativo

36. Fatiamento de sequncias

  • s[a:b] cpia dea(inclusive) atb(exclusive)
  • s[a:] cpia a partir dea(inclusive) at o final
  • s[:b] cpia do incio atb(exclusive)
  • s[:] cpia total des
  • s[a:b:n] cpia de nemnitens
  • Atribuio em fatias:
    • s[2:5] = [4,3,2,1]
    • vlida apenas em sequncias mutveis

37. Funes nativas para sequncias

  • len(s)
    • nmero de elementos
  • min(s), max(s)
    • valores mnimo e mxi mo contidos em s
  • sorted(s)
    • retorna um iterador para percorrer os elementos em ordem ascendente
  • reversed(s)
    • retorna um iterador para percorrer os elementos do ltimo ao primeiro

38. Dicionrios

  • Dicionrios so colees de valores identificados por chaves nicas
    • Outra definio: dicionrios so colees de pareschave:valorque podem ser recuperados pela chave
  • Dicionrios constantes so representados assim:
    • uf={'SC':'Santa Catarina', 'PR':'Paran', 'RS':'Rio Grande do Sul'}

39. Dicionrios: caractersticas

  • As chaves so sempre nicas
  • As chaves tm que ser objetos imutveis
    • nmeros, strings e tuplas so alguns tipos de objetos imutveis
  • Qualquer objeto pode ser um valor
  • A ordem de armazenagem das chaves indefinida
  • Dicionrios so otimizados para acesso direto a um item pela chave, e no para acesso sequencial em determinada ordem

40. Dicionrios: operaes bsicas

  • Criar um dicionrio vazio:
    • d = {}
    • d = dict()
  • Acessar um item do dicionrio:
    • print d[chave]
  • Adicionar ou sobrescrever um item:
    • d[chave] = valor
  • Remover um item:
    • del d[chave]

41. Alguns mtodos de dicionrios

  • Verificar a existncia de uma chave:
    • d.has_key(chave)
    • chave in d
  • Obter listas de chaves, valores e pares:
    • d.keys()
    • d.values()
    • d.items()
  • Acessar um item que talvez no exista:
    • d.get(chave, default) #retorna None ou default

42. Conjuntos

  • Conjuntos so colees de itens nicos e imutveis
  • Existem duas classes de conjuntos:
    • set : conjuntos mutveis
      • suportam s.add(item)es.remove(item)
    • frozenset : conjuntos imutveis
      • podem ser elementos de outros conjuntos e chaves de dicionrios

43. Removendo repeties

  • Transformar uma lista num set e depois transformar o set em lista remove todos os itens duplicados da lista:
    • l = [2, 6, 6, 4, 4, 6, 1, 4, 2, 2]
    • s = set(l)
    • l = list(s)
    • print l
    • # [1, 2, 4, 6]

44. Arquivos

  • Objetos da classefilerepresentam arquivos em disco
  • Para abrir um arquivo, use o construtorfile() (a funoopen() um sinnimo)
    • abrir arquivo binrio para leitura:
      • arq = file('/home/juca/grafico.png','rb')
    • abrir arquivo texto para escrita:
      • arq = file('/home/juca/nomes.txt','w')
    • abrir arquivo para acrescentar (append):
      • arq = file('/home/juca/grafico.png','a')

45. Execuo condicional

  • Forma simples:
    • ifcond :comando
  • Forma em bloco:
    • ifcond : comando1 comando2
  • Alternativas:
    • ifcond1: comando1 elifcond2: comando2 else : comando3

46. Repeties: comandofor

  • Para percorrer sequncias previamente conhecidas
    • foriteminlista: printitem
  • Se for necessrio um ndice numrico:
    • fori,iteminenumerate(lista): printi,item
  • Para percorrer uma PA de 0 a 99:
    • foriinrange(100):printi

47. Repeties: comandowhile

  • Para repetir enquanto uma condio verdadeira
    • """ Srie de Fibonacci
    • at 1.000.000
    • """
    • a = b = 1
    • whilea < 10**6:
    • printa
    • a, b = b, a + b

48. Controle de repeties

  • Para iniciar imediatamente a prxima volta do loop, use o comandocontinue:
    • """ Ignorar linhas em branco
    • """
    • soma = 0
    • forlinhainfile('vendas.txt'):
    • ifnot linha.strip():
    • continue
    • codigo, qtd, valor = linha.split()
    • soma += qtd * valor
    • printsoma

49. Controle de repeties (2)

  • Para encerrar imediatamente o loop, use o comandobreak :
    • total=0
    • while True :
    • p =raw_input ('+')
    • if not p.strip ():break
    • total +=float(p)
    • print '---------'
    • print total

50. Tratamento de excees

  • Comandotry/except :
    • total=0
    • while True:
    • p = raw_input('+')
    • if not p.strip(): break
    • try :
    • total += float(p)
    • exceptValueError:
    • print '.'
    • print '---------'
    • print total

51. Palavras reservadas

  • and
  • assert
  • break
  • class
  • continue
  • def
  • del
  • elif
  • else
  • except
  • exec
  • finally
  • for
  • from
  • global
  • if
  • import
  • in
  • is
  • lambda
  • not
  • or
  • pass
  • print
  • raise
  • return
  • try
  • while
  • yield

52. Variveis

  • Variveis contm referncias a objetos
    • variveisnocontm os objetos em si
  • Variveis no tm tipo
    • os objetos aos quais elas se referem tm tipo
  • Uma varivel no pode ser utilizada em uma expresso sem ter sido inicializada
    • no existe criao automtica de variveis

53. Atribuio

  • Forma simples:
    • reais = euros * taxa
  • Outras formas:
    • atribuio com operao
      • a+=10# a=a+10
    • atribuio mltipla:
      • x=y=z=0
    • atribuio posicional de itens de sequncias:
      • a,b,c=lista
      • i,j=j,i# swap

54. Atribuio

  • Exemplo
    • # Srie de Fibonacci
    • a = b = 1
    • whileTrue:
    • printa
    • a, b = b, a + b

55. Atribuio: princpios

  • Python trabalha com referncias, portanto a atribuio no gera uma cpia do objeto
    • Uma varivelno uma caixa que contm um valor (esquea esta velha idia!)
    • Uma varivel uma etiqueta Post-it colada a um objeto (adote esta nova idia!!!)
  • del : comando de desatribuio
    • remove uma referncia ao objeto
    • no existindo mais referncias, o objeto varrido da memria

56. Variveis

  • Podem ser entendidas como rtulos
    • no so "caixas que contm valores"
  • Atribuir valor varivel equivale a colar um rtulo no valor
    • a = [1,2,3]b = a

[1,2,3] a [1,2,3] a b 57. Apelidos e cpias

  • aebso apelidos do mesmo objeto lista
  • c uma referncia a uma cpia da lista
      • >>> a = [21, 52, 73]
      • >>> b = a
      • >>> c = a[:]
      • >>> b is a
      • True
      • >>> c is a
      • False
      • >>> b == a
      • True
      • >>> c == a
      • True
      • >>> a, b, c
      • ([21, 52, 73], [21, 52, 73], [21, 52, 73])
      • >>> b[1] =99
      • >>> a, b, c
      • ([21,99 , 73], [21,99 , 73], [21, 52, 73])
      • >>>

58. Definio de funes

  • Comandodef inicia a definio
  • Comandoreturnmarca o fim da execuo da funo e define o resultado a ser retornado
    • definverter(texto):
    • if len(texto) >> c = Coisa()
    • >>> c.altura = 2.5
    • >>> c.largura = 3
    • >>> c.altura, c.largura
    • (2.5, 3)
    • >>> dir(c)
    • ['__doc__', '__module__', 'altura', 'largura']
  • passindica um bloco vazio

65. Como extender uma classe

    • classContadorTolerante(Contador):
    • defcontar(self, item):
    • returnself.dic.get(item, 0)
  • declarao
  • mtodo sobrescrito
    • classContadorTotalizador(Contador):
    • def__init__(self):
    • super(ContadorTotalizador, self).__init__()
    • self.total = 0
    • defincluir(self, item):
    • super(ContadorTotalizador, self).incluir(item)
    • self.total += 1
  • Como invocar mtodos de super-classes:

66. Herana mltipla

    • classContadorTolerante(Contador): defcontar(self, item):
    • returnself.dic.get(item, 0)
    • classContadorTotalizador(Contador):
    • def__init__(self):
    • super(ContadorTotalizador, self).__init__()
    • self.total = 0
    • defincluir(self, item):
    • super(ContadorTotalizador, self).incluir(item)
    • self.total += 1
    • classContadorTT(ContadorTotalizador,ContadorTolerante):
    • pass
  • passindica um bloco vazio

67. Propriedades

  • Encapsulamento quando voc precisa

>>> a = C() >>> a.x = 10#!!! >>> print a.x 10 >>> a.x = -10 >>> print a.x# ?????? 0 68. Implementao de uma propriedade classC(object): def__init__(self, x=0): self.__x = x defgetx(self): returnself.__x defsetx(self, x): if x < 0: x = 0 self.__x = x x = property(getx, setx) classC(object): def__init__(self, x): self.__x = x @property defx(self): returnself.__x

  • Apenas paraleitura
  • Para leiturae escrita

69. Exemplo de propriedade

    • classContadorTotalizador( Contador ):
    • def__init__(self):
    • super(ContadorTotalizador, self).__init__()
    • self.__total = 0
    • defincluir(self, item):
    • super(ContadorTotalizador, self).incluir(item)
    • self.__total += 1
    • @property
    • deftotal(self):
    • returnself.__total
  • Funciona porque uma classe estilo novo
    • extende deContador , que extendeobject

70. python.mordida[0] Marco Andr Lopes Mendes [email_address] marrcandre.blogspot.com slideshare.net/marcoandre