SlideShare uma empresa Scribd logo
1 de 73
Baixar para ler offline
Python:
         a primeira mordida




                 Marcelo Siqueira
       www.marcelosiqueira.com.br


1/73
Créditos

   Esses conjunto de slides foi desenvolvido
   a partir do material de:

   Marco André Lopes Mendes
   marcoandre@gmail.com

   Luciano Ramalho
   luciano@ramalho.org
   http://github.com/ramalho/propython




2/73
Linguagem interpretada
       Classificação das linguagens:
          ●   Compilada
                 ●   Fortran, C, C++, Visual Basic, ...




          ●   Interpretada
                 ●   Python, Perl, Basic tradicional, Shell
                      Script, ...




3/73
Tipagem dinâmica
       Python possui o que se chama de tipagem
       dinâmica, ou seja, a tipagem pode mudar a
       cada nova entrada de dados em uma variável.

       >>> a = 1
       >>> type(a)         A tipagem dinâmica reduz a
       <type 'int'>        quantidade de tempo de
       >>> b = 'abacaxi'   planejamento prévio e é um
       >>> type(b)         mecanismos importante para
       <type 'str'>        garantir flexibilidade e
                           simplicidade das funções
       >>> c = 1.0
                           Python.
       >>> type(c)
       <type 'float'>

4/73
Em vez de Hello World...

  print 'Hello Word' # olá mundo


  from datetime import datetime
  from time import sleep

  while True:    # rodar para sempre
      hora = datetime.now()
      print hora.strftime('%H:%M:%S')
      sleep(1)   # aguardar 1 segundo



5/73
Blocos por endentação
                                             dois-pontos marca o
                                             início do bloco

                                  for i in range(1,11):
       indentação dentro              j = i*i
       do bloco deve ser
       constante*                     print i, j
                                  print 'FIM'

                                       retorno ao nível anterior de
                                       indentação marca o final do bloco

        * por convenção, usa-se 4 espaços por nível (mas basta ser consistente)


6/73
Blocos
   ●   Todos os comandos que aceitam blocos:
           ●   if/elif/else       ●   try/except
           ●   for/else           ●   try/finally
           ●   while/else         ●   class
                                  ●   def

   ●   Se o bloco tem apenas um comando, pode-se escrever
       tudo em uma linha:

       if n < 0: print 'Valor inválido'



7/73
Comentários
   ●   O símbolo # indica que o texto partir
       daquele ponto e até o final da linha deve
       ser ignorado pelo interpretador python
       ●   exceto quando # aparece em uma string
   ●   Para comentários de várias linhas, usa-se
       três aspas simples ou duplas (isso cria uma
       “doc string” e não é ignorada pelo python,
       mas é usada para documentar)
        """ Minha terra tem palmeiras,
            Onde canta o Sabiá;
            As aves, que aqui gorjeiam,
            Não gorjeiam como lá. """

8/73
Tipos de dados básicos
   ●   Números: int, long, float, complex
   ●   Strings: str e unicode
   ●   Listas e tuplas: list, tuple
   ●   Dicionários: dict
   ●   Arquivos: file
   ●   Booleanos: bool (True, False)
   ●   Conjuntos: set, frozenset
   ●   None


9/73
Números inteiros
   ●    int: usualmente inteiros de 32 bits
   ●    long: alcance limitado apenas pela memória
   ●    ATENÇÃO: a divisão entre   >>> 1 / 2
        inteiros em Python < 3.0   0
        sempre retorna             >>> 1. / 2
        outro inteiro              0.5
   ●    Python promove             >>> _ + 1
        de int para long           1.5
        automaticamente     >>> 2**30 + (2**30-1)
                            2147483647
                            >>> 2**31
                            2147483648L

10/73
Outros números
   ●    float: ponto-flutuante de 32 bits
   ●    complex: número complexo
   ●    Construtores ou            >>> c = 4 +
        funções de conversão:        3j
        ●   int(a)                 >>> abs(c)
                                   5.0
        ●   long(b)                >>> c.real
        ●   float(c)               4.0
        ●   complex(d)             >>> c.imag
                                   3.0
        ●   abs(e)



11/73
Operadores numéricos
   ●    Aritméticos
         ●   básicos: + - * / ** (o último: potenciação)
         ●   aritmética de inteiros: % // (resto e divisão)
   ●    Bit a bit:
         ●   & | ^ ~ >> << (and, or, xor, not, shr, shl)
   ●    Funções numéricas podem ser encontradas em diversos
        módulos
         ●   principalmente o módulo math
              ●   Ex.:sqrt(), log(), sin(), pi, radians()



12/73
Booleanos
  ●   Valores: True, False
        ●   outros valores: conversão automática
  ●   Conversão explícita: bool(x)

        >>> bool(0)                    >>> bool(3)
        False                          True

        >>> bool('')                   >>> bool('0')
        False                          True

        >>> bool([])                   >>> bool([[]])
        False                          True


13/73
Operadores booleanos
   ●    Operadores relacionais:
        ●   ==     !=    >   >=   <   <=   is   is not
             Sempre retornam um bool
             ●

   ●    Operadores lógicos:
        ●   and     or
             ● Retornam o primeiro ou o segundo valor
             ● Exemplo:    print nome or '(sem nome)'
             ● Avaliação com curto-circuito

        ●   not
             ●   sempre retorna um bool
14/73
None
  ●     O valor nulo e único (só existe uma instância
        de None)
  ●     Equivale a False em um contexto booleano
  ●     Usos comuns:
        ●   valor default em parâmetros de funções
        ●   valor de retorno de funções que não têm o
            que retornar
  ●     Para testar, utilize o operador is:
        if x is None: return y



15/73
Strings
   ●    str: cada caractere é um byte; acentuação
        depende do encoding
   ●    strings podem
        ser delimitadas        >>> fruta = 'maçã'
        por:                   >>> fruta
                               'maxc3xa7xc3xa3'
        ●   aspas simples ou   >>> print fruta
            duplas: 'x', "x"   maçã
        ●   três aspas         >>> print repr(fruta)
            simples ou         'maxc3xa7xc3xa3'
            duplas:            >>> print str(fruta)
            '''x''', """x"""   maçã
                               >>> len(fruta)
                               6

16/73
Strings unicode
   ●    Padrão universal, compatível com todos os
        idiomas existentes (português, chinês,
        grego, híndi, árabe, suaíli etc.)
   ●    Cada caractere é      >>> fruta = u'maçã'
        representado por      >>> fruta
        dois bytes            u'maxe7xe3'
   ●    Utilize o prefixo u   >>> print fruta
        para denotar uma      maçã
        constante unicode:    >>> len(fruta)
        u'maçã'               4



17/73
Codificação em scripts
   ●    As constantes str ou unicode são
        interpretadas segundo a codificação
        declarada num comentário especial no início
        do arquivo .py:


                 #!/usr/bin/env python
                 # coding: utf-8




18/73
Como gerar strings com variáveis
             embutidas
   ●    Operador de interpolação: f % tupla
   >>>● m = 'Euro'
   >>>● t = 2.7383
   >>> f = 'O %s está cotado a R$ %0.2f.' %(m,t)
   >>>● print f
   O Euro está cotado a R$ 2.74.
   ●


   ●    Tipos de conversão mais comuns:
            %s, %f, %d: string, float, inteiro
             ●

            decimal
   ●    Aprendendo a aprender:
        ●   Google: Python String Formatting
            Operations
19/73
Algumas funções com strings
   ●    chr(n): retorna uma string com um caractere
        de 8-bits cujo código é n
   ●    unichr(n): retorna uma string com um
        caractere Unicode cujo código é n
   ●    ord(c): retorna o código numérico do
        caractere c (pode ser Unicode)
   ●    repr(x): conversão de objeto para sua
        representação explícita em Python
   ●    len(s): número de caracteres da string



20/73
String: exemplos
  >>> s = "parabens!"
  >>> l = list(s)
  >>> l
  ['p', 'a', 'r', 'a', 'b', 'e', 'n', 's', '!']
  >>> l2 = [ord(x) for x in l]
  >>> l2
  [112, 97, 114, 97, 98, 101, 110, 115, 33]
  >>> l3 = [chr(x) for x in l2]
  >>> l3
  ['p', 'a', 'r', 'a', 'b', 'e', 'n', 's', '!']
  >>> s2 = "".join(l3)
  >>> s2
  parabens!

21/73
Alguns métodos de strings
   ●    s.strip()
        ●   retira os brancos (espaços, tabs e newlines) da frente
            e de trás de s (+ parâmetros)
        ●   rstrip e lstrip retiram à direita e à esquerda
   ●    s.upper(), s.lower(), s.capitalize(),
        s.title()
        ●   converte todas maiúsculas, todas minúsculas,
            primeira maiúscula por palavra, primeira maiúscula
            da string
   ●    s.isdigit(), s.isalnum(), s.islower()...
        ●   testa se a string contém somente dígitos, ou somente
            dígitos e letras ou só minúsculas
22/73
Buscando substrings
    ●   sub in s
        ●   s contém sub?
    ●   s.startswith(sub), s.endswith(sub)
        ●   s começa ou termina com sub?
    ●   s.find(sub), s.index(sub)
        ●   posição de sub em s (se sub não existe em s, find
            retorna -1, index sinaliza ValueError)
        ●   rfind e rindex começam pela direita
    ●   s.replace(sub1, sub2)
        ●   substitui as ocorrências de sub1 por sub2


23/73
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 símbolos do escopo corrente
        ●   dir()

24/73
Listas
   ●    Listas são coleções de itens heterogêneos
        que podem ser acessados sequencialmente ou
        diretamente através de um índice numérico.
   ●    Constantes do tipo lista são delimitadas
        por colchetes [].
        ●   a = []
        ●   b = [1,10,7,5]
        ●   c = ['casa',43,b,[9,8,7],u'coisa']




25/73
Listas
   ●    O método lista.append(i) é usado para colocar um
        novo item i na lista.
   ●    O método lista.extend(l) inclui todos os itens de l
        no final da lista. O resultado é o mesmo da expressão
        abaixo, só que mais eficiente pois evita copiar todos os
        itens da lista:
                                           lista += l2
   ●    Função embutida len() retorna o número de itens da
        lista:
        ●   len(a), len(b), len(c) # 0, 4, ?




26/73
Listas
   ●    O método lista.sort() ordena os itens de forma
        ascendente.
   ●    O método lista.reverse() inverte a ordem dos itens
        dentro da própria lista.
   ●    Ambos devolvem None.

   ●    A função embutida sorted(l) devolve uma lista com os
        itens de uma lista ou sequência qualquer ordenados
   ●    A função embutida reversed(l) devolve um iterador
        para percorrer a sequência em ordem inversa (do último
        para o primeiro item).


27/73
Operações com itens de listas
   ●    Atribuição:
        ●   lista[5] = 123
   ●    Outros métodos da classe list:
        ●   lista.insert(posicao, elemento)
        ●   lista.pop()    # +params: ver doc
        ●   lista.index(elemento) # +params: ver doc
        ●   lista.remove(elemento)
   ●    Remoção do item:
        ●   del lista[3]



28/73
Uma função para gerar listas
   ●    range([inicio,] fim[, passo])
        ●   Retorna uma progressão aritmética 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]




29/73
Expressões para gerar listas
   ●    “List comprehensions” ou “abrangências de
        listas”
   ●    Produz uma lista a partir de qualquer
        objeto iterável
   ●    Economizam loops explícitos




30/73
Abrangência 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]




31/73
Abrangência de listas
 ●   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]


32/73
Produto cartesiano
   ●    Usando dois ou mais comandos for dentro 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')]




33/73
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


34/73
Tuplas
   ●    Tuplas são sequências imutá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
        ●   em certos contextos os parênteses em
            redor das tuplas podem ser omitidos
            a, b = b, a        >>> t1 = 1, 3, 5, 7
                               >>> t1
                               (1, 3, 5, 7)



35/73
Conversões entre listas e strings
   ●    s.split([sep[,max]])
        ●   retorna uma lista de strings, quebrando s
            nos brancos ou no separador fornecido
        ●   max limita o número de quebras s.split(';')
   ●    s.join(l)
        ● retorna todas as strings contidas na
          lista l "coladas" com a string s (é comum
          que s seja uma string vazia)
                                          ''.join(l)
   ●    list(s)
        ●   retorna s como uma lista de caracteres
                                         list('python')

36/73
Tuplas
   ●    Atribuições múltiplas 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


37/73
Operações com sequências
   ●    Sequências são coleções ordenadas
        ●   nativamente: strings, listas, tuplas,
            buffers
   ●    Operadores:
        ●   s[i]         acesso a um item
        ●   s[-i]        acesso a um item pelo final
        ●   s+z          concatenação
        ●   s*n          n cópias de s concatenadas
        ●   i in s       teste de inclusão
        ●   i not in s   teste de inclusão negativo


38/73
Fatiamento de sequências
   ●    s[a:b] cópia de a (inclusive) até b
        (exclusive)
   ●    s[a:]     cópia a partir de a (inclusive) até o final
   ●    s[:b]     cópia do início até b (exclusive)
   ●    s[:]      cópia total de s
   ●    s[a:b:n]     cópia de n em n itens
   ●    Atribuição em fatias:
        ●   s[2:5] = [4,3,2,1]
        ●   válida apenas em sequências mutáveis



39/73
Funções nativas para sequências
   ●    len(s)
        ●   número de elementos
   ●    min(s), max(s)
        ●   valores mínimo e máximo 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


40/73
Dicionários
   ●    Dicionários são coleções de valores identificados por
        chaves únicas
        ●   Outra definição: dicionários são coleções de pares
            chave:valor que podem ser recuperados pela
            chave
   ●    Dicionários constantes são representados assim:
        uf={'SC':'Santa Catarina',
         'PR':'Paraná', 'RS':'Rio Grande do
         Sul'}




41/73
Dicionários: características
   ●    As chaves são sempre únicas
   ●    As chaves têm que ser objetos imutáveis
        ●   números, strings e tuplas são alguns tipos
            de objetos imutáveis
   ●    Qualquer objeto pode ser um valor
   ●    A ordem de armazenagem das chaves é
        indefinida
   ●    Dicionários são otimizados para acesso
        direto a um item pela chave, e não para
        acesso sequencial em determinada ordem



42/73
Dicionários: operações básicas
   ●    Criar um dicionário vazio:
        ●   d = {}
        ●   d = dict()
   ●    Acessar um item do dicionário:
        ●   print d[chave]
   ●    Adicionar ou sobrescrever um item:
        ●   d[chave] = valor
   ●    Remover um item:
        ●   del d[chave]



43/73
Alguns métodos de dicionários
   ●    Verificar a existência 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 não exista:
        ●   d.get(chave, default) #retorna None ou
            default

44/73
Conjuntos
   ●    Conjuntos são coleções de itens únicos e
        imutáveis
   ●    Existem duas classes de conjuntos:
        ●   set: conjuntos mutáveis
             ●suportam s.add(item) e s.remove(item)
        ●   frozenset: conjuntos imutáveis
             ●   podem ser elementos de outros
                 conjuntos e chaves de dicionários




45/73
Removendo repetições
   ●    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]




46/73
Arquivos
  ●     Objetos da classe file representam arquivos
        em disco
  ●     Para abrir um arquivo, use o construtor
        file() (a função open() é um sinônimo)
        ●   abrir arquivo binário 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')


47/73
Execução condicional
   ●    Forma simples:
        ●   if cond: comando
   ●    Forma em bloco:
        ●   if cond:
              comando1
              comando2
   ●    Alternativas:
        ●   if cond1: comando1
            elif cond2: comando2
            else: comando3



48/73
Repetições: comando for
   ●    Para percorrer sequências previamente
        conhecidas
        ●   for item in lista:
                print item
   ●    Se for necessário um índice numérico:
        ●   for i,item in enumerate(lista):
                print i,item
   ●    Para percorrer uma PA de 0 a 99:
        ●   for i in range(100):
                print i



49/73
Repetições: comando while
   ●    Para repetir enquanto uma condição é
        verdadeira
         """ Série de Fibonacci
             até 1.000.000
         """
         a = b = 1
         while a < 10**6:
             print a
             a, b = b, a + b




50/73
Controle de repetições
   ●    Para iniciar imediatamente a próxima volta
        do loop, use o comando continue:
        """ Ignorar linhas em branco
        """
        soma = 0
        for linha in file('vendas.txt'):
            if not linha.strip():
                 continue
            codigo, qtd, valor = linha.split()
            soma += qtd * valor
        print soma


51/73
Controle de repetições (2)
   ●    Para encerrar imediatamente o loop, use o
        comando break:

        total=0
        while True:
            p = raw_input('+')
            if not p.strip(): break
            total += float(p)
        print '---------'
        print total




52/73
Tratamento de exceções
   ●    Comando try/except:
        total=0
        while True:
            p = raw_input('+')
            if not p.strip(): break
            try:
                 total += float(p)
            except ValueError:
                 print '.'
        print '---------'
        print total


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

54/73
Variáveis
   ●    Variáveis contém referências a objetos
        ●   variáveis não “contém” os objetos em si
   ●    Variáveis não têm tipo
        ●   os objetos aos quais elas se referem têm
            tipo
   ●    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



55/73
Atribuição
   ●    Forma simples:
        ●   reais = euros * taxa
   ●    Outras formas:
        ●   atribuição com operação
             ●a+=10   # a=a+10
        ●   atribuição múltipla:
             ●x=y=z=0
        ●   atribuição posicional de itens de
            sequências:
             ● a,b,c=lista
             ● i,j=j,i  # swap
56/73
Atribuição
   ●    Exemplo


                  # Série de Fibonacci

                  a = b = 1
                  while True:
                      print a
                      a, b = b, a + b




57/73
Atribuição: princípios
   ●    Python trabalha com referências, portanto a
        atribuição não gera uma cópia do objeto
        ●   Uma variável não é uma caixa que contém um
            valor (esqueça esta velha idéia!)
        ●   Uma variável é uma etiqueta Post-it colada
            a um objeto (adote esta nova idéia!!!)
   ●    del: comando de desatribuição
        ●   remove uma referência ao objeto
        ●   não existindo mais referências, o objeto é
            varrido da memória



58/73
Variáveis
   ●    Podem ser entendidas como rótulos
        ●   não são "caixas que contém valores"
   ●    Atribuir valor à variável equivale a colar
        um rótulo no valor
        a = [1,2,3]                    b = a

               a                        a   b
             [1,2,3]                  [1,2,3]



59/73
Apelidos e cópias
 >>> a = [21, 52, 73]     ●   a e b são apelidos do
 >>> b = a                    mesmo objeto lista
 >>> c = a[:]
 >>> b is a               ●   c é uma referência a
 True                         uma cópia da lista
 >>> 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])
60/73   >>>
Definição de funções
   ●    Comando def inicia a definição
   ●    Comando return marca o fim da execução da
        função e define o resultado a ser retornado

             def inverter(texto):
                 if len(texto) <= 1:
                     return texto
                 lista = list(texto)
                 lista.reverse()
                 return ''.join(lista)



61/73
Argumentos de funções
●   Valores default indicam argumentos opcionais
    ●   argumentos obrigatórios devem vir antes de
        argumentos opcionais
       def exibir(texto, estilo=None, cor='preto'):
●   Palavras-chave podem ser usadas para fornecer
    argumentos fora de ordem
●   Como a função acima pode ser invocada:
         exibir('abacaxi')
         exibir('abacaxi','negrito','amarelo')
         exibir('abacaxi',cor='azul')


62/73
Argumentos arbitrários
   ●    Use *args para aceitar uma lista de
        argumentos posicionais
   ●    Use **args para aceitar um dicionário de
        argumentos identificados por palavras-chave
   ●    Exemplo:
        def tag(nome, *linhas, **atributos):




63/73
Argumentos arbitrários (2)
   print tag('br')
   print tag('img',src='foto.jpg',width=3,height=4)
   print tag('a','Wikipédia',
       href='http://wikipedia.org')
   print tag('p','Eu não devia te dizer',
       'mas essa lua','mas esse conhaque',
       'botam a gente comovido como o diabo.',
        id='poesia')
    <br />
    <img src="foto.jpg" height="4" width="3" />
    <a href="http://wikipedia.org">Wikipédia</a>
    <p id="poesia">
            Eu não devia te dizer
            mas essa lua
            mas esse conhaque
            botam a gente comovido como o diabo.
    </p>
64/73
Argumentos arbitrários (3)
    def tag(nome, *linhas, **atributos):
        saida = ['<' + nome]
        for par in atributos.items():
            saida.append(' %s="%s"' % par)
        if linhas:
            saida.append('>')
            if len(linhas) == 1:
                saida.append(linhas[0])
            else:
                saida.append('n')
                for linha in linhas:
                    saida.append('t%sn' % linha)
            saida.append('</%s>' % nome)
        else:
            saida.append(' />')
        return ''.join(saida)
65/73
Classes
 class Contador(object):                  ●   declaração
     def __init__(self):
         self.dic = {}
                                          ●   inicializador

        def incluir(self, item):
            qtd = self.dic.get(item, 0) + 1
            self.dic[item] = qtd
            return qtd                      ● métodos



        def contar(self, item):
            return self.dic[item]




66/73
Classes “vazias”
   ●    Estilo antigo (old style) class Coisa:
        ●   pass indica um bloco vazio      pass
   ●    Estilo novo (new style)          class Coisa(object):
                                             pass
   ●    É possível definir atributos nas instâncias
        >>> c = Coisa()
        >>> c.altura = 2.5
        >>> c.largura = 3
        >>> c.altura, c.largura
        (2.5, 3)
        >>> dir(c)
        ['__doc__', '__module__', 'altura', 'largura']



67/73
Como extender uma classe
   class ContadorTolerante(Contador):            ●   declaração
          def contar(self, item):                ●   método
              return self.dic.get(item, 0)           sobrescrito

  ●     Como invocar métodos de super-classes:
   class ContadorTotalizador(Contador):

          def __init__(self):
              super(ContadorTotalizador, self).__init__()
              self.total = 0

          def incluir(self, item):
              super(ContadorTotalizador, self).incluir(item)
              self.total += 1


68/73
Herança múltipla
 class ContadorTolerante(Contador):
     def contar(self, item):
         return self.dic.get(item, 0)

 class ContadorTotalizador(Contador):
     def __init__(self):
         super(ContadorTotalizador, self).__init__()
         self.total = 0

        def incluir(self, item):
            super(ContadorTotalizador, self).incluir(item)
            self.total += 1

 class ContadorTT(ContadorTotalizador,ContadorTolerante):
     pass
●   pass indica um bloco vazio

69/73
Propriedades
        ●   Encapsulamento quando você precisa
              >>>   a = C()
              >>>   a.x = 10    #!!!
              >>>   print a.x
              10
              >>>   a.x = -10
              >>>   print a.x   # ??????
              0




70/73
Implementação de uma
                  propriedade
                          class C(object):
        ●   Apenas para       def __init__(self, x):
            leitura               self.__x = x
                              @property
                              def x(self):
                                  return self.__x
  class C(object):
      def __init__(self, x=0):
          self.__x = x
      def getx(self):
                                 ●   Para leitura
          return self.__x            e escrita
      def setx(self, x):
          if x < 0: x = 0
          self.__x = x
      x = property(getx, setx)
71/73
Exemplo de propriedade
 class ContadorTotalizador(Contador):
     def __init__(self):
         super(ContadorTotalizador, self).__init__()
         self.__total = 0

         def incluir(self, item):
             super(ContadorTotalizador, self).incluir(item)
             self.__total += 1

         @property
         def total(self):
           return self.__total

  ●     Funciona porque é uma classe estilo novo
        ●   extende de Contador, que extende object

72/73
python.mordida[0]




                      Marcelo Siqueira
                      @marcelosiqueira
            www.marcelosiqueira.com.br


73/73

Mais conteúdo relacionado

Mais procurados (20)

Linguagem c parte 2
Linguagem c parte 2Linguagem c parte 2
Linguagem c parte 2
 
Conjunto de instruções mips - introdução
Conjunto de instruções mips - introduçãoConjunto de instruções mips - introdução
Conjunto de instruções mips - introdução
 
Algoritmos Aula 08
Algoritmos Aula 08Algoritmos Aula 08
Algoritmos Aula 08
 
Pged 01
Pged 01Pged 01
Pged 01
 
Apresentação Linguagem C
Apresentação Linguagem CApresentação Linguagem C
Apresentação Linguagem C
 
Cartao referencia ccs
Cartao referencia ccsCartao referencia ccs
Cartao referencia ccs
 
Logica Algoritmo 05 Repeticao
Logica Algoritmo 05 RepeticaoLogica Algoritmo 05 Repeticao
Logica Algoritmo 05 Repeticao
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Resumo assembly x86 16 bits
Resumo assembly x86 16 bitsResumo assembly x86 16 bits
Resumo assembly x86 16 bits
 
Cet P Sistemas Linguagem C Introducao
Cet P Sistemas Linguagem C IntroducaoCet P Sistemas Linguagem C Introducao
Cet P Sistemas Linguagem C Introducao
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
 
Aula6 - Linguagem C
Aula6 - Linguagem CAula6 - Linguagem C
Aula6 - Linguagem C
 
Linguagem C clecioamerico
Linguagem C clecioamericoLinguagem C clecioamerico
Linguagem C clecioamerico
 
Visualg
VisualgVisualg
Visualg
 
Aula 3
Aula 3Aula 3
Aula 3
 
Função malloc
Função mallocFunção malloc
Função malloc
 
Programação em C
Programação em CProgramação em C
Programação em C
 
Lista de exercicios algoritmos resolvida-
Lista de exercicios   algoritmos  resolvida-Lista de exercicios   algoritmos  resolvida-
Lista de exercicios algoritmos resolvida-
 
Linguagem c parte 1
Linguagem c parte 1Linguagem c parte 1
Linguagem c parte 1
 
Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)
 

Semelhante a Python: a primeira mordida

Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordidaLuciano Ramalho
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programaçãoGustavo Nazário
 
Arduino e Python: Do It Yourself
Arduino e Python: Do It YourselfArduino e Python: Do It Yourself
Arduino e Python: Do It YourselfBruno Nascimento
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Pythonguestac3de
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao cprofwtelles
 
2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com Python2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com PythonJardel Weyrich
 
Apresentação curso pic básico fbs eletrônica
Apresentação   curso pic básico fbs eletrônicaApresentação   curso pic básico fbs eletrônica
Apresentação curso pic básico fbs eletrônicaFabio Souza
 
Python_2018-03-02-MC102KLMN-Aula02.pdf
Python_2018-03-02-MC102KLMN-Aula02.pdfPython_2018-03-02-MC102KLMN-Aula02.pdf
Python_2018-03-02-MC102KLMN-Aula02.pdfValter moreira
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compactoLuciano Ramalho
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução PythonGleison Rodrigues
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Marco Mendes
 
Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?Juliano Atanazio
 

Semelhante a Python: a primeira mordida (20)

Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordida
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
Aula python
Aula pythonAula python
Aula python
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programação
 
Arduino e Python: Do It Yourself
Arduino e Python: Do It YourselfArduino e Python: Do It Yourself
Arduino e Python: Do It Yourself
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com Python2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com Python
 
Curso de Python e Django
Curso de Python e DjangoCurso de Python e Django
Curso de Python e Django
 
LP1 P01 - Python.pdf
LP1 P01 - Python.pdfLP1 P01 - Python.pdf
LP1 P01 - Python.pdf
 
Apresentação curso pic básico fbs eletrônica
Apresentação   curso pic básico fbs eletrônicaApresentação   curso pic básico fbs eletrônica
Apresentação curso pic básico fbs eletrônica
 
Python_2018-03-02-MC102KLMN-Aula02.pdf
Python_2018-03-02-MC102KLMN-Aula02.pdfPython_2018-03-02-MC102KLMN-Aula02.pdf
Python_2018-03-02-MC102KLMN-Aula02.pdf
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 
Aula de C e C++
Aula de C e C++Aula de C e C++
Aula de C e C++
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução Python
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10
 
Vhdl
VhdlVhdl
Vhdl
 
Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?
 

Mais de BonoBee

O que você quer ser quando crescer? (Campus Party 13)
 O que você quer ser quando crescer?  (Campus Party 13) O que você quer ser quando crescer?  (Campus Party 13)
O que você quer ser quando crescer? (Campus Party 13)BonoBee
 
O que você quer ser quando crescer?
O que você quer ser quando crescer?O que você quer ser quando crescer?
O que você quer ser quando crescer?BonoBee
 
Inteligência Artificial e Jurimetria o futuro já chegou
Inteligência Artificial e Jurimetria o futuro já chegouInteligência Artificial e Jurimetria o futuro já chegou
Inteligência Artificial e Jurimetria o futuro já chegouBonoBee
 
Agilizando processos com Scrum
Agilizando processos com ScrumAgilizando processos com Scrum
Agilizando processos com ScrumBonoBee
 
Pitch Hackacity
Pitch HackacityPitch Hackacity
Pitch HackacityBonoBee
 
GDPR - General Data Protection Regulation
GDPR - General Data Protection RegulationGDPR - General Data Protection Regulation
GDPR - General Data Protection RegulationBonoBee
 
I.A. A Evolução
I.A. A EvoluçãoI.A. A Evolução
I.A. A EvoluçãoBonoBee
 
Economia Criativa e o Mercado de TI v2
Economia Criativa e o Mercado de TI v2Economia Criativa e o Mercado de TI v2
Economia Criativa e o Mercado de TI v2BonoBee
 
Palestra MVP - Estudo de Casos
Palestra MVP - Estudo de CasosPalestra MVP - Estudo de Casos
Palestra MVP - Estudo de CasosBonoBee
 
Palestra MVP living lab ms
Palestra MVP   living lab msPalestra MVP   living lab ms
Palestra MVP living lab msBonoBee
 
Economia Criativa e o Mercado de TI
Economia Criativa e o Mercado de TIEconomia Criativa e o Mercado de TI
Economia Criativa e o Mercado de TIBonoBee
 
WordPress: do Blog ao E-Commerce - PHPMS Conf'14
WordPress: do Blog ao E-Commerce - PHPMS Conf'14WordPress: do Blog ao E-Commerce - PHPMS Conf'14
WordPress: do Blog ao E-Commerce - PHPMS Conf'14BonoBee
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoBonoBee
 
Your code sucks, let's fix it! Objects Calisthenics
Your code sucks, let's fix it! Objects CalisthenicsYour code sucks, let's fix it! Objects Calisthenics
Your code sucks, let's fix it! Objects CalisthenicsBonoBee
 

Mais de BonoBee (14)

O que você quer ser quando crescer? (Campus Party 13)
 O que você quer ser quando crescer?  (Campus Party 13) O que você quer ser quando crescer?  (Campus Party 13)
O que você quer ser quando crescer? (Campus Party 13)
 
O que você quer ser quando crescer?
O que você quer ser quando crescer?O que você quer ser quando crescer?
O que você quer ser quando crescer?
 
Inteligência Artificial e Jurimetria o futuro já chegou
Inteligência Artificial e Jurimetria o futuro já chegouInteligência Artificial e Jurimetria o futuro já chegou
Inteligência Artificial e Jurimetria o futuro já chegou
 
Agilizando processos com Scrum
Agilizando processos com ScrumAgilizando processos com Scrum
Agilizando processos com Scrum
 
Pitch Hackacity
Pitch HackacityPitch Hackacity
Pitch Hackacity
 
GDPR - General Data Protection Regulation
GDPR - General Data Protection RegulationGDPR - General Data Protection Regulation
GDPR - General Data Protection Regulation
 
I.A. A Evolução
I.A. A EvoluçãoI.A. A Evolução
I.A. A Evolução
 
Economia Criativa e o Mercado de TI v2
Economia Criativa e o Mercado de TI v2Economia Criativa e o Mercado de TI v2
Economia Criativa e o Mercado de TI v2
 
Palestra MVP - Estudo de Casos
Palestra MVP - Estudo de CasosPalestra MVP - Estudo de Casos
Palestra MVP - Estudo de Casos
 
Palestra MVP living lab ms
Palestra MVP   living lab msPalestra MVP   living lab ms
Palestra MVP living lab ms
 
Economia Criativa e o Mercado de TI
Economia Criativa e o Mercado de TIEconomia Criativa e o Mercado de TI
Economia Criativa e o Mercado de TI
 
WordPress: do Blog ao E-Commerce - PHPMS Conf'14
WordPress: do Blog ao E-Commerce - PHPMS Conf'14WordPress: do Blog ao E-Commerce - PHPMS Conf'14
WordPress: do Blog ao E-Commerce - PHPMS Conf'14
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do código
 
Your code sucks, let's fix it! Objects Calisthenics
Your code sucks, let's fix it! Objects CalisthenicsYour code sucks, let's fix it! Objects Calisthenics
Your code sucks, let's fix it! Objects Calisthenics
 

Python: a primeira mordida

  • 1. Python: a primeira mordida Marcelo Siqueira www.marcelosiqueira.com.br 1/73
  • 2. Créditos Esses conjunto de slides foi desenvolvido a partir do material de: Marco André Lopes Mendes marcoandre@gmail.com Luciano Ramalho luciano@ramalho.org http://github.com/ramalho/propython 2/73
  • 3. Linguagem interpretada Classificação das linguagens: ● Compilada ● Fortran, C, C++, Visual Basic, ... ● Interpretada ● Python, Perl, Basic tradicional, Shell Script, ... 3/73
  • 4. Tipagem dinâmica Python possui o que se chama de tipagem dinâmica, ou seja, a tipagem pode mudar a cada nova entrada de dados em uma variável. >>> a = 1 >>> type(a) A tipagem dinâmica reduz a <type 'int'> quantidade de tempo de >>> b = 'abacaxi' planejamento prévio e é um >>> type(b) mecanismos importante para <type 'str'> garantir flexibilidade e simplicidade das funções >>> c = 1.0 Python. >>> type(c) <type 'float'> 4/73
  • 5. Em vez de Hello World... print 'Hello Word' # olá mundo from datetime import datetime from time import sleep while True: # rodar para sempre hora = datetime.now() print hora.strftime('%H:%M:%S') sleep(1) # aguardar 1 segundo 5/73
  • 6. Blocos por endentação dois-pontos marca o início do bloco for i in range(1,11): indentação dentro j = i*i do bloco deve ser constante* print i, j print 'FIM' retorno ao nível anterior de indentação marca o final do bloco * por convenção, usa-se 4 espaços por nível (mas basta ser consistente) 6/73
  • 7. Blocos ● Todos os comandos que aceitam blocos: ● if/elif/else ● try/except ● for/else ● try/finally ● while/else ● class ● def ● Se o bloco tem apenas um comando, pode-se escrever tudo em uma linha: if n < 0: print 'Valor inválido' 7/73
  • 8. Comentários ● O símbolo # indica que o texto partir daquele ponto e até o final da linha deve ser ignorado pelo interpretador python ● exceto quando # aparece em uma string ● Para comentários de várias linhas, usa-se três aspas simples ou duplas (isso cria uma “doc string” e não é ignorada pelo python, mas é usada para documentar) """ Minha terra tem palmeiras, Onde canta o Sabiá; As aves, que aqui gorjeiam, Não gorjeiam como lá. """ 8/73
  • 9. Tipos de dados básicos ● Números: int, long, float, complex ● Strings: str e unicode ● Listas e tuplas: list, tuple ● Dicionários: dict ● Arquivos: file ● Booleanos: bool (True, False) ● Conjuntos: set, frozenset ● None 9/73
  • 10. Números inteiros ● int: usualmente inteiros de 32 bits ● long: alcance limitado apenas pela memória ● ATENÇÃO: a divisão entre >>> 1 / 2 inteiros em Python < 3.0 0 sempre retorna >>> 1. / 2 outro inteiro 0.5 ● Python promove >>> _ + 1 de int para long 1.5 automaticamente >>> 2**30 + (2**30-1) 2147483647 >>> 2**31 2147483648L 10/73
  • 11. Outros números ● float: ponto-flutuante de 32 bits ● complex: número complexo ● Construtores ou >>> c = 4 + funções de conversão: 3j ● int(a) >>> abs(c) 5.0 ● long(b) >>> c.real ● float(c) 4.0 ● complex(d) >>> c.imag 3.0 ● abs(e) 11/73
  • 12. Operadores numéricos ● Aritméticos ● básicos: + - * / ** (o último: potenciação) ● aritmética de inteiros: % // (resto e divisão) ● Bit a bit: ● & | ^ ~ >> << (and, or, xor, not, shr, shl) ● Funções numéricas podem ser encontradas em diversos módulos ● principalmente o módulo math ● Ex.:sqrt(), log(), sin(), pi, radians() 12/73
  • 13. Booleanos ● Valores: True, False ● outros valores: conversão automática ● Conversão explícita: bool(x) >>> bool(0) >>> bool(3) False True >>> bool('') >>> bool('0') False True >>> bool([]) >>> bool([[]]) False True 13/73
  • 14. Operadores booleanos ● Operadores relacionais: ● == != > >= < <= is is not Sempre retornam um bool ● ● Operadores lógicos: ● and or ● Retornam o primeiro ou o segundo valor ● Exemplo: print nome or '(sem nome)' ● Avaliação com curto-circuito ● not ● sempre retorna um bool 14/73
  • 15. None ● O valor nulo e único (só existe uma instância de None) ● Equivale a False em um contexto booleano ● Usos comuns: ● valor default em parâmetros de funções ● valor de retorno de funções que não têm o que retornar ● Para testar, utilize o operador is: if x is None: return y 15/73
  • 16. Strings ● str: cada caractere é um byte; acentuação depende do encoding ● strings podem ser delimitadas >>> fruta = 'maçã' por: >>> fruta 'maxc3xa7xc3xa3' ● aspas simples ou >>> print fruta duplas: 'x', "x" maçã ● três aspas >>> print repr(fruta) simples ou 'maxc3xa7xc3xa3' duplas: >>> print str(fruta) '''x''', """x""" maçã >>> len(fruta) 6 16/73
  • 17. Strings unicode ● Padrão universal, compatível com todos os idiomas existentes (português, chinês, grego, híndi, árabe, suaíli etc.) ● Cada caractere é >>> fruta = u'maçã' representado por >>> fruta dois bytes u'maxe7xe3' ● Utilize o prefixo u >>> print fruta para denotar uma maçã constante unicode: >>> len(fruta) u'maçã' 4 17/73
  • 18. Codificação em scripts ● As constantes str ou unicode são interpretadas segundo a codificação declarada num comentário especial no início do arquivo .py: #!/usr/bin/env python # coding: utf-8 18/73
  • 19. Como gerar strings com variáveis embutidas ● Operador de interpolação: f % tupla >>>● m = 'Euro' >>>● t = 2.7383 >>> f = 'O %s está cotado a R$ %0.2f.' %(m,t) >>>● print f O Euro está cotado a R$ 2.74. ● ● Tipos de conversão mais comuns: %s, %f, %d: string, float, inteiro ● decimal ● Aprendendo a aprender: ● Google: Python String Formatting Operations 19/73
  • 20. Algumas funções com strings ● chr(n): retorna uma string com um caractere de 8-bits cujo código é n ● unichr(n): retorna uma string com um caractere Unicode cujo código é n ● ord(c): retorna o código numérico do caractere c (pode ser Unicode) ● repr(x): conversão de objeto para sua representação explícita em Python ● len(s): número de caracteres da string 20/73
  • 21. String: exemplos >>> s = "parabens!" >>> l = list(s) >>> l ['p', 'a', 'r', 'a', 'b', 'e', 'n', 's', '!'] >>> l2 = [ord(x) for x in l] >>> l2 [112, 97, 114, 97, 98, 101, 110, 115, 33] >>> l3 = [chr(x) for x in l2] >>> l3 ['p', 'a', 'r', 'a', 'b', 'e', 'n', 's', '!'] >>> s2 = "".join(l3) >>> s2 parabens! 21/73
  • 22. Alguns métodos de strings ● s.strip() ● retira os brancos (espaços, tabs e newlines) da frente e de trás de s (+ parâmetros) ● rstrip e lstrip retiram à direita e à esquerda ● s.upper(), s.lower(), s.capitalize(), s.title() ● converte todas maiúsculas, todas minúsculas, primeira maiúscula por palavra, primeira maiúscula da string ● s.isdigit(), s.isalnum(), s.islower()... ● testa se a string contém somente dígitos, ou somente dígitos e letras ou só minúsculas 22/73
  • 23. Buscando substrings ● sub in s ● s contém sub? ● s.startswith(sub), s.endswith(sub) ● s começa ou termina com sub? ● s.find(sub), s.index(sub) ● posição de sub em s (se sub não existe em s, find retorna -1, index sinaliza ValueError) ● rfind e rindex começam pela direita ● s.replace(sub1, sub2) ● substitui as ocorrências de sub1 por sub2 23/73
  • 24. 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 símbolos do escopo corrente ● dir() 24/73
  • 25. Listas ● Listas são coleções de itens heterogêneos que podem ser acessados sequencialmente ou diretamente através de um índice numérico. ● Constantes do tipo lista são delimitadas por colchetes []. ● a = [] ● b = [1,10,7,5] ● c = ['casa',43,b,[9,8,7],u'coisa'] 25/73
  • 26. Listas ● O método lista.append(i) é usado para colocar um novo item i na lista. ● O método lista.extend(l) inclui todos os itens de l no final da lista. O resultado é o mesmo da expressão abaixo, só que mais eficiente pois evita copiar todos os itens da lista: lista += l2 ● Função embutida len() retorna o número de itens da lista: ● len(a), len(b), len(c) # 0, 4, ? 26/73
  • 27. Listas ● O método lista.sort() ordena os itens de forma ascendente. ● O método lista.reverse() inverte a ordem dos itens dentro da própria lista. ● Ambos devolvem None. ● A função embutida sorted(l) devolve uma lista com os itens de uma lista ou sequência qualquer ordenados ● A função embutida reversed(l) devolve um iterador para percorrer a sequência em ordem inversa (do último para o primeiro item). 27/73
  • 28. Operações com itens de listas ● Atribuição: ● lista[5] = 123 ● Outros métodos da classe list: ● lista.insert(posicao, elemento) ● lista.pop() # +params: ver doc ● lista.index(elemento) # +params: ver doc ● lista.remove(elemento) ● Remoção do item: ● del lista[3] 28/73
  • 29. Uma função para gerar listas ● range([inicio,] fim[, passo]) ● Retorna uma progressão aritmética 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] 29/73
  • 30. Expressões para gerar listas ● “List comprehensions” ou “abrangências de listas” ● Produz uma lista a partir de qualquer objeto iterável ● Economizam loops explícitos 30/73
  • 31. Abrangência 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] 31/73
  • 32. Abrangência de listas ● 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] 32/73
  • 33. Produto cartesiano ● Usando dois ou mais comandos for dentro 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')] 33/73
  • 34. 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 34/73
  • 35. Tuplas ● Tuplas são sequências imutá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 ● em certos contextos os parênteses em redor das tuplas podem ser omitidos a, b = b, a >>> t1 = 1, 3, 5, 7 >>> t1 (1, 3, 5, 7) 35/73
  • 36. Conversões entre listas e strings ● s.split([sep[,max]]) ● retorna uma lista de strings, quebrando s nos brancos ou no separador fornecido ● max limita o número de quebras s.split(';') ● s.join(l) ● retorna todas as strings contidas na lista l "coladas" com a string s (é comum que s seja uma string vazia) ''.join(l) ● list(s) ● retorna s como uma lista de caracteres list('python') 36/73
  • 37. Tuplas ● Atribuições múltiplas 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 37/73
  • 38. Operações com sequências ● Sequências são coleções ordenadas ● nativamente: strings, listas, tuplas, buffers ● Operadores: ● s[i] acesso a um item ● s[-i] acesso a um item pelo final ● s+z concatenação ● s*n n cópias de s concatenadas ● i in s teste de inclusão ● i not in s teste de inclusão negativo 38/73
  • 39. Fatiamento de sequências ● s[a:b] cópia de a (inclusive) até b (exclusive) ● s[a:] cópia a partir de a (inclusive) até o final ● s[:b] cópia do início até b (exclusive) ● s[:] cópia total de s ● s[a:b:n] cópia de n em n itens ● Atribuição em fatias: ● s[2:5] = [4,3,2,1] ● válida apenas em sequências mutáveis 39/73
  • 40. Funções nativas para sequências ● len(s) ● número de elementos ● min(s), max(s) ● valores mínimo e máximo 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 40/73
  • 41. Dicionários ● Dicionários são coleções de valores identificados por chaves únicas ● Outra definição: dicionários são coleções de pares chave:valor que podem ser recuperados pela chave ● Dicionários constantes são representados assim: uf={'SC':'Santa Catarina', 'PR':'Paraná', 'RS':'Rio Grande do Sul'} 41/73
  • 42. Dicionários: características ● As chaves são sempre únicas ● As chaves têm que ser objetos imutáveis ● números, strings e tuplas são alguns tipos de objetos imutáveis ● Qualquer objeto pode ser um valor ● A ordem de armazenagem das chaves é indefinida ● Dicionários são otimizados para acesso direto a um item pela chave, e não para acesso sequencial em determinada ordem 42/73
  • 43. Dicionários: operações básicas ● Criar um dicionário vazio: ● d = {} ● d = dict() ● Acessar um item do dicionário: ● print d[chave] ● Adicionar ou sobrescrever um item: ● d[chave] = valor ● Remover um item: ● del d[chave] 43/73
  • 44. Alguns métodos de dicionários ● Verificar a existência 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 não exista: ● d.get(chave, default) #retorna None ou default 44/73
  • 45. Conjuntos ● Conjuntos são coleções de itens únicos e imutáveis ● Existem duas classes de conjuntos: ● set: conjuntos mutáveis ●suportam s.add(item) e s.remove(item) ● frozenset: conjuntos imutáveis ● podem ser elementos de outros conjuntos e chaves de dicionários 45/73
  • 46. Removendo repetições ● 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] 46/73
  • 47. Arquivos ● Objetos da classe file representam arquivos em disco ● Para abrir um arquivo, use o construtor file() (a função open() é um sinônimo) ● abrir arquivo binário 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') 47/73
  • 48. Execução condicional ● Forma simples: ● if cond: comando ● Forma em bloco: ● if cond: comando1 comando2 ● Alternativas: ● if cond1: comando1 elif cond2: comando2 else: comando3 48/73
  • 49. Repetições: comando for ● Para percorrer sequências previamente conhecidas ● for item in lista: print item ● Se for necessário um índice numérico: ● for i,item in enumerate(lista): print i,item ● Para percorrer uma PA de 0 a 99: ● for i in range(100): print i 49/73
  • 50. Repetições: comando while ● Para repetir enquanto uma condição é verdadeira """ Série de Fibonacci até 1.000.000 """ a = b = 1 while a < 10**6: print a a, b = b, a + b 50/73
  • 51. Controle de repetições ● Para iniciar imediatamente a próxima volta do loop, use o comando continue: """ Ignorar linhas em branco """ soma = 0 for linha in file('vendas.txt'): if not linha.strip(): continue codigo, qtd, valor = linha.split() soma += qtd * valor print soma 51/73
  • 52. Controle de repetições (2) ● Para encerrar imediatamente o loop, use o comando break: total=0 while True: p = raw_input('+') if not p.strip(): break total += float(p) print '---------' print total 52/73
  • 53. Tratamento de exceções ● Comando try/except: total=0 while True: p = raw_input('+') if not p.strip(): break try: total += float(p) except ValueError: print '.' print '---------' print total 53/73
  • 54. Palavras reservadas ● and ● elif ● global ● or ● assert ● else ● if ● pass ● break ● except ● import ● print ● class ● exec ● in ● raise ● continue ● finally ● is ● return ● def ● for ● lambda ● try ● del ● from ● not ● while ● yield 54/73
  • 55. Variáveis ● Variáveis contém referências a objetos ● variáveis não “contém” os objetos em si ● Variáveis não têm tipo ● os objetos aos quais elas se referem têm tipo ● 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 55/73
  • 56. Atribuição ● Forma simples: ● reais = euros * taxa ● Outras formas: ● atribuição com operação ●a+=10 # a=a+10 ● atribuição múltipla: ●x=y=z=0 ● atribuição posicional de itens de sequências: ● a,b,c=lista ● i,j=j,i # swap 56/73
  • 57. Atribuição ● Exemplo # Série de Fibonacci a = b = 1 while True: print a a, b = b, a + b 57/73
  • 58. Atribuição: princípios ● Python trabalha com referências, portanto a atribuição não gera uma cópia do objeto ● Uma variável não é uma caixa que contém um valor (esqueça esta velha idéia!) ● Uma variável é uma etiqueta Post-it colada a um objeto (adote esta nova idéia!!!) ● del: comando de desatribuição ● remove uma referência ao objeto ● não existindo mais referências, o objeto é varrido da memória 58/73
  • 59. Variáveis ● Podem ser entendidas como rótulos ● não são "caixas que contém valores" ● Atribuir valor à variável equivale a colar um rótulo no valor a = [1,2,3] b = a a a b [1,2,3] [1,2,3] 59/73
  • 60. Apelidos e cópias >>> a = [21, 52, 73] ● a e b são apelidos do >>> b = a mesmo objeto lista >>> c = a[:] >>> b is a ● c é uma referência a True uma cópia da lista >>> 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]) 60/73 >>>
  • 61. Definição de funções ● Comando def inicia a definição ● Comando return marca o fim da execução da função e define o resultado a ser retornado def inverter(texto): if len(texto) <= 1: return texto lista = list(texto) lista.reverse() return ''.join(lista) 61/73
  • 62. Argumentos de funções ● Valores default indicam argumentos opcionais ● argumentos obrigatórios devem vir antes de argumentos opcionais def exibir(texto, estilo=None, cor='preto'): ● Palavras-chave podem ser usadas para fornecer argumentos fora de ordem ● Como a função acima pode ser invocada: exibir('abacaxi') exibir('abacaxi','negrito','amarelo') exibir('abacaxi',cor='azul') 62/73
  • 63. Argumentos arbitrários ● Use *args para aceitar uma lista de argumentos posicionais ● Use **args para aceitar um dicionário de argumentos identificados por palavras-chave ● Exemplo: def tag(nome, *linhas, **atributos): 63/73
  • 64. Argumentos arbitrários (2) print tag('br') print tag('img',src='foto.jpg',width=3,height=4) print tag('a','Wikipédia', href='http://wikipedia.org') print tag('p','Eu não devia te dizer', 'mas essa lua','mas esse conhaque', 'botam a gente comovido como o diabo.', id='poesia') <br /> <img src="foto.jpg" height="4" width="3" /> <a href="http://wikipedia.org">Wikipédia</a> <p id="poesia"> Eu não devia te dizer mas essa lua mas esse conhaque botam a gente comovido como o diabo. </p> 64/73
  • 65. Argumentos arbitrários (3) def tag(nome, *linhas, **atributos): saida = ['<' + nome] for par in atributos.items(): saida.append(' %s="%s"' % par) if linhas: saida.append('>') if len(linhas) == 1: saida.append(linhas[0]) else: saida.append('n') for linha in linhas: saida.append('t%sn' % linha) saida.append('</%s>' % nome) else: saida.append(' />') return ''.join(saida) 65/73
  • 66. Classes class Contador(object): ● declaração def __init__(self): self.dic = {} ● inicializador def incluir(self, item): qtd = self.dic.get(item, 0) + 1 self.dic[item] = qtd return qtd ● métodos def contar(self, item): return self.dic[item] 66/73
  • 67. Classes “vazias” ● Estilo antigo (old style) class Coisa: ● pass indica um bloco vazio pass ● Estilo novo (new style) class Coisa(object): pass ● É possível definir atributos nas instâncias >>> c = Coisa() >>> c.altura = 2.5 >>> c.largura = 3 >>> c.altura, c.largura (2.5, 3) >>> dir(c) ['__doc__', '__module__', 'altura', 'largura'] 67/73
  • 68. Como extender uma classe class ContadorTolerante(Contador): ● declaração def contar(self, item): ● método return self.dic.get(item, 0) sobrescrito ● Como invocar métodos de super-classes: class ContadorTotalizador(Contador): def __init__(self): super(ContadorTotalizador, self).__init__() self.total = 0 def incluir(self, item): super(ContadorTotalizador, self).incluir(item) self.total += 1 68/73
  • 69. Herança múltipla class ContadorTolerante(Contador): def contar(self, item): return self.dic.get(item, 0) class ContadorTotalizador(Contador): def __init__(self): super(ContadorTotalizador, self).__init__() self.total = 0 def incluir(self, item): super(ContadorTotalizador, self).incluir(item) self.total += 1 class ContadorTT(ContadorTotalizador,ContadorTolerante): pass ● pass indica um bloco vazio 69/73
  • 70. Propriedades ● Encapsulamento quando você precisa >>> a = C() >>> a.x = 10 #!!! >>> print a.x 10 >>> a.x = -10 >>> print a.x # ?????? 0 70/73
  • 71. Implementação de uma propriedade class C(object): ● Apenas para def __init__(self, x): leitura self.__x = x @property def x(self): return self.__x class C(object): def __init__(self, x=0): self.__x = x def getx(self): ● Para leitura return self.__x e escrita def setx(self, x): if x < 0: x = 0 self.__x = x x = property(getx, setx) 71/73
  • 72. Exemplo de propriedade class ContadorTotalizador(Contador): def __init__(self): super(ContadorTotalizador, self).__init__() self.__total = 0 def incluir(self, item): super(ContadorTotalizador, self).incluir(item) self.__total += 1 @property def total(self): return self.__total ● Funciona porque é uma classe estilo novo ● extende de Contador, que extende object 72/73
  • 73. python.mordida[0] Marcelo Siqueira @marcelosiqueira www.marcelosiqueira.com.br 73/73