SlideShare une entreprise Scribd logo
1  sur  15
Télécharger pour lire hors ligne
Python para quem sabe Python




        Turma 1, aula 2

         Iteráveis & cia.
Relembrando: iteradores em Python
●   Em Python iteradores são obtidos através da
    função embutida iter()
●   A função built-in iter() obtém iteradores dos
    objetos de uma destas formas:
         –   iter(obj) procura método obj.__iter__() e o invoca
         –   Se obj não tem método __iter__:
              ●   iter() tenta acessar obj[0], e se isso funcionar, cria um iterador
              ●   obj.__getitem__(0) caracteriza o velho protocolo de sequências
●   Se iter é invocada com 2 argumentos iter(f, s):
         –   Neste caso iter() cria um iterador que invoca f() e devolve
             os valores produzidos, até que f() produza o valor s
    http://docs.python.org/library/collections.html#collections-abstract-base-classes
Função iter com dois argumentos
●   Se iter é invocada com 2 argumentos iter(f, s):
    –   Objeto é invocado f() repetidamente até que o valor
        retornado seja igual a s (a sentinela)
                             with open('mydata.txt') as fp:
                                 for line in iter(fp.readline, ''):
                                     process_line(line)

                             http://docs.python.org/library/functions.html#iter
                      from random import randint

                      def dado():
                          return randint(1,6)

                      # gera valores ate que um 6 seja sorteado
                      for r in iter(dado, 6): # 6 e' o "sentinela"
                          print r

          https://github.com/oturing/ppqsp/blob/master/iteraveis/demo_iter2.py
Tipos iteráveis: sequências
●   Definição do protocolo (ou interface):
     ●   collections.Sequence
●   Sequências imutáveis
     ●   str, unicode, tuple...
●   Sequências mutáveis
     ●   list,array.array...




    http://docs.python.org/library/collections.html#collections-abstract-base-classes
Sequence
          UML
●   Diagrama parcial!
●   Classes e métodos
    abstratos em itálico
●   Dois exemplos de
    subclasses concretas
    de Sequence*:
    ●   str
    ●   tuple


        * a realidade é mais complexa: str e tuple são registradas
          (ex. Sequence.register(str)), mas não herdam de fato (conforme __mro__)
List comprehension
●   Compreensão de lista ou abrangência de lista
●   Exemplo: usar todos os elementos:
       –   L2 = [n*10 for n in L]
List comprehension
●   Maior legibilidade, pela clareza da intenção
●   Expressão sempre produz nova lista
>>> L = [8, 6.9, 6.4, 5]
>>> L2 = []
>>> for n in L:
...     L2.append(round(n,0))
...
>>> L2
[8.0, 7.0, 6.0, 5.0] >>> L = [8, 6.9, 6.4, 5]
                      >>> L2 = [round(n,0) for n in L]
                      >>> L2
                      [8.0, 7.0, 6.0, 5.0]
List comprehension
●   Filtrar alguns elementos:
    ●   L2 = [n for n in L if n > 0]




●   Filtrar e processar
    ●   L2 = [n*10 for n in L if n > 0]
Iteráveis ansiosos x preguiçosos
●    Exemplo built-in: sorted() x reversed()
●    List comprehension x expressão geradora
    >>> for i in [letra for letra in gera_letra()]:
    ...    print i
    ...             >>> for i in (letra for letra in gera_letra()):
    gerando 'A'... ...     print i
    gerando 'B'... ...
    gerando 'C'... gerando 'A'...
    A               A
    B               gerando 'B'...
    C               B
                    gerando 'C'...
                    C
List comp. x expressão geradora
            from time import sleep, strftime

            def demora(ts=1):
                agora = strftime('%H:%M:%S')
                print 'demorando...', agora
                sleep(1)
                return agora

listcomp    raw_input('(tecle <ENTER> para rodar o teste LISTCOMP) ')

            for t in [demora() for i in range(3)]:
                print t

genexp      raw_input('(tecle <ENTER> para rodar o teste GENEXP) ')

            for t in (demora() for i in range(3)):
                print t



         https://github.com/oturing/ppqsp/blob/master/iteraveis/demo_genexp.py
Funções geradoras
>>> def xxx():
...     yield 'X'
                      ●   O exemplo mais simples
...     yield 'XX'
...     yield 'XXX'
...                   >>> it = xxx()
>>> it = xxx()        >>> it
>>> for i in it:      <generator object xxx at 0xb7840a2c>
...     print i       >>> it.next()
...                   'X'
X                     >>> it.next()
XX                    'XX'
XXX                   >>> it.next()
>>>                   'XXX'
                      >>> it.next()
                      Traceback (most recent call last):
                        File "<stdin>", line 1, in <module>
                      StopIteration
Função                def gera_letra(ultima='C', verboso=True):
                          cod = ord('A')
geradora                  while chr(cod) <= ultima:
                              letra = chr(cod)
                              if verboso:
                                  print 'gerando %r...' % letra
                              yield letra
                              cod += 1

>>> for i in [letra   for letra in gera_letra()]:
...    print i
...                   >>> for i in (letra for letra in gera_letra()):
gerando 'A'...        ...    print i
gerando 'B'...        ...
gerando 'C'...        gerando 'A'...
A                     A
B                     gerando 'B'...
C                     B
                      gerando 'C'...
                      C



    https://github.com/oturing/ppqsp/blob/master/iteraveis/genexp_x_listcomp.py
Funções geradoras
●   Um exemplo prático: isis2json.py
●   Objetivo dos geradores:
    ●   Desacoplar a lógica de leitura do arquivo da lógica
        de gravação
    ●   Sem iteradores, o laço principal do programa teria
        as duas lógicas entrelaçadas, tornando mais difícil
        a manutenção e principalmente a extensão para
        suportar mais formatos de entrada



                  https://github.com/bireme/isis2json/blob/master/isis2json.py
Funções embutidas que consomem
     ou produzem iteráveis
●   Construtoras: list, dict, tuple, set, frozenset
    ●   Consome iterável, produz estrutura de dados
●   Fábricas: range, zip, map, filter, sorted
    ●   Cria nova lista a partir de argumentos
●   Geradoras: enumerate, reversed, xrange*
    ●   Cria gerador a partir de argumentos
●   Redutoras: all, any, sum, min, max, len, reduce**
    ●   Reduz iterável a um único valor
                        * xrange não produz um gerador ou iterador de verdade,
                          mas algo muito parecido
                        ** reduce foi movida para o módulo functools no Python 3
Módulo itertools
●   Iteradores (potencialmente) infinitos
    ●   count(), cycle(), repeat()
●   Iteradores que combinam vários iteráveis
    ●   chain(), tee(), izip(), imap(), product(), compress()...
●   Iteradores que selecionam ou agrupam itens:
    ●   compress(), dropwhile(), groupby(), ifilter(), islice()...
●   Iteradores que produzem combinações
    ●   Ex: product(), permutations(), combinations()...

                       http://docs.python.org/library/itertools.html

Contenu connexe

Tendances

Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismo
Maurício Linhares
 
Palestra python
Palestra pythonPalestra python
Palestra python
Rony Cruch
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
Maurício Linhares
 

Tendances (18)

Python 02
Python 02Python 02
Python 02
 
Python 01
Python 01Python 01
Python 01
 
Aprendendo ruby
Aprendendo rubyAprendendo ruby
Aprendendo ruby
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
 
Python 03
Python 03Python 03
Python 03
 
Curso de Python e Django
Curso de Python e DjangoCurso de Python e Django
Curso de Python e Django
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismo
 
Python
PythonPython
Python
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
 
Javafx Introdução
Javafx IntroduçãoJavafx Introdução
Javafx Introdução
 
Palestra python
Palestra pythonPalestra python
Palestra python
 
Programando com Python
Programando com PythonProgramando com Python
Programando com Python
 
Java para iniciantes
Java para iniciantesJava para iniciantes
Java para iniciantes
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
 

Similaire à Python para quem sabe Python (aula 2)

Introdução à Linguagem de programação Python
Introdução à Linguagem de programação PythonIntrodução à Linguagem de programação Python
Introdução à Linguagem de programação Python
dmmartins
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programação
Gustavo Nazário
 

Similaire à Python para quem sabe Python (aula 2) (20)

IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
 
Py sintaxe
Py sintaxePy sintaxe
Py sintaxe
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
Aula python
Aula pythonAula python
Aula python
 
Introdução à Linguagem de programação Python
Introdução à Linguagem de programação PythonIntrodução à Linguagem de programação Python
Introdução à Linguagem de programação Python
 
Arduino e Python: Do It Yourself
Arduino e Python: Do It YourselfArduino e Python: Do It Yourself
Arduino e Python: Do It Yourself
 
Introdução à Programação em Python
Introdução à Programação em PythonIntrodução à Programação em Python
Introdução à Programação em Python
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordida
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programação
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Python 3.x - Ihh.. E agora ? Como faço ?
Python 3.x - Ihh.. E agora ? Como faço ?Python 3.x - Ihh.. E agora ? Como faço ?
Python 3.x - Ihh.. E agora ? Como faço ?
 
Canivete shell
Canivete shellCanivete shell
Canivete shell
 
Canivete shell
Canivete shellCanivete shell
Canivete shell
 
Minicurso Básico de Python - PythonDay
Minicurso Básico de Python - PythonDayMinicurso Básico de Python - PythonDay
Minicurso Básico de Python - PythonDay
 
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
 
Palestra2009
Palestra2009Palestra2009
Palestra2009
 
Python2.5.ppt
Python2.5.pptPython2.5.ppt
Python2.5.ppt
 
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
 

Plus de Luciano Ramalho

Encapsulamento com descritores
Encapsulamento com descritoresEncapsulamento com descritores
Encapsulamento com descritores
Luciano Ramalho
 
Encapsulamento com Descritores em Python
Encapsulamento com Descritores em PythonEncapsulamento com Descritores em Python
Encapsulamento com Descritores em Python
Luciano Ramalho
 
JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)
Luciano Ramalho
 
JavaScript agora é sério (FISL 2011)
JavaScript agora é sério (FISL 2011)JavaScript agora é sério (FISL 2011)
JavaScript agora é sério (FISL 2011)
Luciano Ramalho
 

Plus de Luciano Ramalho (20)

Wiki-wiki S/A
Wiki-wiki S/AWiki-wiki S/A
Wiki-wiki S/A
 
Mongodb: agregação
Mongodb: agregaçãoMongodb: agregação
Mongodb: agregação
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Encapsulamento com descritores
Encapsulamento com descritoresEncapsulamento com descritores
Encapsulamento com descritores
 
Arduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoArduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojo
 
Encapsulamento com Descritores em Python
Encapsulamento com Descritores em PythonEncapsulamento com Descritores em Python
Encapsulamento com Descritores em Python
 
Dojo com Processing
Dojo com ProcessingDojo com Processing
Dojo com Processing
 
Dojo com Arduino
Dojo com ArduinoDojo com Arduino
Dojo com Arduino
 
Open Library no Mongodb
Open Library no MongodbOpen Library no Mongodb
Open Library no Mongodb
 
OO em Python sem sotaque
OO em Python sem sotaqueOO em Python sem sotaque
OO em Python sem sotaque
 
Modelos ricos
Modelos ricosModelos ricos
Modelos ricos
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do Google
 
Ensinando OO com Python
Ensinando OO com PythonEnsinando OO com Python
Ensinando OO com Python
 
Alex Martelli's Python Design Patterns
Alex Martelli's Python Design PatternsAlex Martelli's Python Design Patterns
Alex Martelli's Python Design Patterns
 
Dspace em 5 minutos
Dspace em 5 minutosDspace em 5 minutos
Dspace em 5 minutos
 
JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)
 
JavaScript agora é sério (FISL 2011)
JavaScript agora é sério (FISL 2011)JavaScript agora é sério (FISL 2011)
JavaScript agora é sério (FISL 2011)
 
Wiki sa-v2
Wiki sa-v2Wiki sa-v2
Wiki sa-v2
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
Porque bibliotecários usam bancos de dados esquisitos
Porque bibliotecários usam bancos de dados esquisitosPorque bibliotecários usam bancos de dados esquisitos
Porque bibliotecários usam bancos de dados esquisitos
 

Dernier

Dernier (8)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 

Python para quem sabe Python (aula 2)

  • 1. Python para quem sabe Python Turma 1, aula 2 Iteráveis & cia.
  • 2. Relembrando: iteradores em Python ● Em Python iteradores são obtidos através da função embutida iter() ● A função built-in iter() obtém iteradores dos objetos de uma destas formas: – iter(obj) procura método obj.__iter__() e o invoca – Se obj não tem método __iter__: ● iter() tenta acessar obj[0], e se isso funcionar, cria um iterador ● obj.__getitem__(0) caracteriza o velho protocolo de sequências ● Se iter é invocada com 2 argumentos iter(f, s): – Neste caso iter() cria um iterador que invoca f() e devolve os valores produzidos, até que f() produza o valor s http://docs.python.org/library/collections.html#collections-abstract-base-classes
  • 3. Função iter com dois argumentos ● Se iter é invocada com 2 argumentos iter(f, s): – Objeto é invocado f() repetidamente até que o valor retornado seja igual a s (a sentinela) with open('mydata.txt') as fp: for line in iter(fp.readline, ''): process_line(line) http://docs.python.org/library/functions.html#iter from random import randint def dado(): return randint(1,6) # gera valores ate que um 6 seja sorteado for r in iter(dado, 6): # 6 e' o "sentinela" print r https://github.com/oturing/ppqsp/blob/master/iteraveis/demo_iter2.py
  • 4. Tipos iteráveis: sequências ● Definição do protocolo (ou interface): ● collections.Sequence ● Sequências imutáveis ● str, unicode, tuple... ● Sequências mutáveis ● list,array.array... http://docs.python.org/library/collections.html#collections-abstract-base-classes
  • 5. Sequence UML ● Diagrama parcial! ● Classes e métodos abstratos em itálico ● Dois exemplos de subclasses concretas de Sequence*: ● str ● tuple * a realidade é mais complexa: str e tuple são registradas (ex. Sequence.register(str)), mas não herdam de fato (conforme __mro__)
  • 6. List comprehension ● Compreensão de lista ou abrangência de lista ● Exemplo: usar todos os elementos: – L2 = [n*10 for n in L]
  • 7. List comprehension ● Maior legibilidade, pela clareza da intenção ● Expressão sempre produz nova lista >>> L = [8, 6.9, 6.4, 5] >>> L2 = [] >>> for n in L: ... L2.append(round(n,0)) ... >>> L2 [8.0, 7.0, 6.0, 5.0] >>> L = [8, 6.9, 6.4, 5] >>> L2 = [round(n,0) for n in L] >>> L2 [8.0, 7.0, 6.0, 5.0]
  • 8. List comprehension ● Filtrar alguns elementos: ● L2 = [n for n in L if n > 0] ● Filtrar e processar ● L2 = [n*10 for n in L if n > 0]
  • 9. Iteráveis ansiosos x preguiçosos ● Exemplo built-in: sorted() x reversed() ● List comprehension x expressão geradora >>> for i in [letra for letra in gera_letra()]: ... print i ... >>> for i in (letra for letra in gera_letra()): gerando 'A'... ... print i gerando 'B'... ... gerando 'C'... gerando 'A'... A A B gerando 'B'... C B gerando 'C'... C
  • 10. List comp. x expressão geradora from time import sleep, strftime def demora(ts=1): agora = strftime('%H:%M:%S') print 'demorando...', agora sleep(1) return agora listcomp raw_input('(tecle <ENTER> para rodar o teste LISTCOMP) ') for t in [demora() for i in range(3)]: print t genexp raw_input('(tecle <ENTER> para rodar o teste GENEXP) ') for t in (demora() for i in range(3)): print t https://github.com/oturing/ppqsp/blob/master/iteraveis/demo_genexp.py
  • 11. Funções geradoras >>> def xxx(): ... yield 'X' ● O exemplo mais simples ... yield 'XX' ... yield 'XXX' ... >>> it = xxx() >>> it = xxx() >>> it >>> for i in it: <generator object xxx at 0xb7840a2c> ... print i >>> it.next() ... 'X' X >>> it.next() XX 'XX' XXX >>> it.next() >>> 'XXX' >>> it.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
  • 12. Função def gera_letra(ultima='C', verboso=True): cod = ord('A') geradora while chr(cod) <= ultima: letra = chr(cod) if verboso: print 'gerando %r...' % letra yield letra cod += 1 >>> for i in [letra for letra in gera_letra()]: ... print i ... >>> for i in (letra for letra in gera_letra()): gerando 'A'... ... print i gerando 'B'... ... gerando 'C'... gerando 'A'... A A B gerando 'B'... C B gerando 'C'... C https://github.com/oturing/ppqsp/blob/master/iteraveis/genexp_x_listcomp.py
  • 13. Funções geradoras ● Um exemplo prático: isis2json.py ● Objetivo dos geradores: ● Desacoplar a lógica de leitura do arquivo da lógica de gravação ● Sem iteradores, o laço principal do programa teria as duas lógicas entrelaçadas, tornando mais difícil a manutenção e principalmente a extensão para suportar mais formatos de entrada https://github.com/bireme/isis2json/blob/master/isis2json.py
  • 14. Funções embutidas que consomem ou produzem iteráveis ● Construtoras: list, dict, tuple, set, frozenset ● Consome iterável, produz estrutura de dados ● Fábricas: range, zip, map, filter, sorted ● Cria nova lista a partir de argumentos ● Geradoras: enumerate, reversed, xrange* ● Cria gerador a partir de argumentos ● Redutoras: all, any, sum, min, max, len, reduce** ● Reduz iterável a um único valor * xrange não produz um gerador ou iterador de verdade, mas algo muito parecido ** reduce foi movida para o módulo functools no Python 3
  • 15. Módulo itertools ● Iteradores (potencialmente) infinitos ● count(), cycle(), repeat() ● Iteradores que combinam vários iteráveis ● chain(), tee(), izip(), imap(), product(), compress()... ● Iteradores que selecionam ou agrupam itens: ● compress(), dropwhile(), groupby(), ifilter(), islice()... ● Iteradores que produzem combinações ● Ex: product(), permutations(), combinations()... http://docs.python.org/library/itertools.html