Hello, I am Python!
           Marcel Caraciolo
  Mini-Curso De Introdução a Python




                      II Workshop de Software Livre - CIN/UFPE - Recife - PE

                  1
                                                                               1
Quem é o instrutor ?
• Marcel Pinheiro Caraciolo - @marcelcaraciolo
   •   Sergipano, porém Recifense.

   •   Diretor de Pesquisa e Desenvolvimento da Orygens

   •   Mestrando em Ciência da Computação no CIN/UFPE na área de mineração de dados

   •   Membro e Moderador da Celúla de Usuários Python de Pernambuco (PUG-PE)

   •   Minhas áreas de interesse: Computação móvel e Computação inteligente

   •   Meus blogs: http://www.mobideia.com (sobre Mobilidade desde 2006)

                      http://aimotion.blogspot.com (sobre I.A. desde 2009)



                Jovem Aprendiz ainda nas artes pythonicas.... (desde 2007)

                                                   II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                            2
                                                                                                            2
!"#$




O que é Python ?

     Por que Python?




                II Workshop de Software Livre - CIN/UFPE - Recife - PE
            3
                                                                                3
!"#$




 Por que Python
É fácil




               II Workshop de Software Livre - CIN/UFPE - Recife - PE
           4
                                                                               4
!"#$




Por que é fácil
• Semelhança com pseudo-código.




                             II Workshop de Software Livre - CIN/UFPE - Recife - PE
                         5
                                                                                             5
Hello World Classíco
... ‘hello world’ - Python vs { Java, C, PHP e Pascal }




                                      II Workshop de Software Livre - CIN/UFPE - Recife - PE


                                                                                               6
Hello World Classíco
.... Em Python ....




                      print “Hello World”




                                  II Workshop de Software Livre - CIN/UFPE - Recife - PE


                                                                                           7
Por que Python
É fácil

          É poderoso




                  II Workshop de Software Livre - CIN/UFPE - Recife - PE
              8
                                                                           8
Canivete suíço
Tipagem dinâmica

Biblioteca padrão completa

Multi-paradigma

Multi-plataforma

Facilmente extensível

Free Software (GPL)


                             II Workshop de Software Livre - CIN/UFPE - Recife - PE


                                                                                      9
Por que é poderoso
•   Python para Web
    •   Web é presente -> Futuro!

    •   Django (http://www.django.org)

    •   Zope (http://www.zope.org)

    •   Plone (http://www.plone.org)

    •   Turbogears (http://www.turbogears.org)

    •   Web2Py (http://www.web2py.com)




                                            II Workshop de Software Livre - CIN/UFPE - Recife - PE

                                       10
                                                                                                     10
Web




http://www.nationalgeographic.com/
                                          II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                     11
                                                                                                   11
Web




http://globo.com
                        II Workshop de Software Livre - CIN/UFPE - Recife - PE
                   12
                                                                                 12
Por que é poderoso
•   Python para gestão empresarial
    •   PyGTK (http://www.pygtk.org)

    •   PyQT (http://qt.nokia.com)

    •   MySQL, PostgreSQL, Oracle, Sqlite




                                            II Workshop de Software Livre - CIN/UFPE - Recife - PE

                                     13
                                                                                                     13
Aplicativos Desktop




http://www.stoq.com.br/   http://taskcoach.org/

                           II Workshop de Software Livre - CIN/UFPE - Recife - PE



                                                                                    14
Aplicativos Desktop




      Python + Qt + Qml
                  II Workshop de Software Livre - CIN/UFPE - Recife - PE



                                                                           15
Python é multi-plataforma
•   Python em dispositivos móveis
    •   Python for Symbian (PyS60), PySide (Maemo), ASE (Android)




                                       II Workshop de Software Livre - CIN/UFPE - Recife - PE



                                                                                                16
Android (ASE)




http://code.google.com/p/android-scripting/
                               II Workshop de Software Livre - CIN/UFPE - Recife - PE

                          17
                                                                                        17
Por que é poderoso




                                                     NetworkX
        http://pypi.python.org/pypi




                            II Workshop de Software Livre - CIN/UFPE - Recife - PE



                                                                                     18
Python é multi-plataforma

•   PyMT
    •   Python Multi Touch

    •   Especialmente criado para
        ambientes multi-touch




    http://pymt.eu/

                                    II Workshop de Software Livre - CIN/UFPE - Recife - PE



                                                                                             19
PyGame e Jogos




   http://www.pygame.org/news.html
                     II Workshop de Software Livre - CIN/UFPE - Recife - PE



                                                                              20
Aplicativos Desktop




      http://www.blender.org/
                     II Workshop de Software Livre - CIN/UFPE - Recife - PE



                                                                              21
Quem usa Python?




              II Workshop de Software Livre - CIN/UFPE - Recife - PE

         22
                                                                       22
... e aqui no Brasil também!




               II Workshop de Software Livre - CIN/UFPE - Recife - PE



                                                                        23
Python entre as 10 + !




     http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
                                              II Workshop de Software Livre - CIN/UFPE - Recife - PE


                                                                                                       24
O que é python ?

É fácil

          É poderoso




                 II Workshop de Software Livre - CIN/UFPE - Recife - PE



                                                                          25
O que é python ?

É fácil

          É poderoso


                           É divertido

                 II Workshop de Software Livre - CIN/UFPE - Recife - PE



                                                                          25
Fácil e poderoso!

lista = ['laranja', 'banana', 'uva']
lista.sort()
 
for item in lista:
    print item.capitalize()




                          II Workshop de Software Livre - CIN/UFPE - Recife - PE


                                                                                   26
Hun, sei o que é Python!


    ...E agora como eu começo ?




                    II Workshop de Software Livre - CIN/UFPE - Recife - PE


                                                                             27
Instaladores
•   Interpretador Python disponível para diversas
    plataformas.
    •   Windows, Unix, Linux, etc.

    •   Para usuários Windows, é necessário o download do SDK!

        •   http://www.python.org/download/




                                          II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                     28
                                                                                                   28
Instaladores
•   Atualmente Python está na versão 2.7.1 / 3.2
    •   No Python 3.0 houve mudanças críticas! 2.7.x suaviliza a transição para
        os desenvolvedores (Muitos frameworks ainda escritos para Python 2.x)




                                            II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                     29
                                                                                                     29
Instaladores (Windows)




               II Workshop de Software Livre - CIN/UFPE - Recife - PE
          30
                                                                        30
Instaladores (Windows)
•   Não esqueça de adicionar o caminho da instalação
    no PATH do sistema!
    •   ;C:Python2x
                                                                               Windows 7
    •   >>> 2 + 3                                                              Approved!

    •   >>> 5




                              II Workshop de Software Livre - CIN/UFPE - Recife - PE
                         31
                                                                                           31
Instaladores
•   E enquanto no Linux e Unix ?
    •   Estas distribuições já disponibilizam para você de forma nativa!




    •   Prompt do python “>>>”:

        •   Para sair:

            •   No Unix, digite CONTROL-D

            •   No Windows, digite CONTROL-Z + ENTER


                                              II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                       32
                                                                                                       32
Vamos executar!
...E agora como eu crio meu
    programa em python ?




                       II Workshop de Software Livre - CIN/UFPE - Recife - PE
                  33
                                                                                33
Rodando Programas no Unix
•     Os arquivos python tem finalização .py!




     %python filename.py

•     Você pode usar qualquer editor de texto para codificar o seu código!

     •   No Windows : Clássico Notepad ou o IDLE...

     •   No Mac OS/Linux: VI, TextEdit, GEdit, TextMate ...

       Para tornar o arquivo *.py executável:
                     #!/usr/bin/python
    Para aceitar textos com acentos e caracteres
                       especiais:
                  # -*- coding: utf-8 -*-
                                                    II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                               34
                                                                                                             34
Ambiente IDLE
• Ambiente Shell de
  desenvolvimento básico

• Editor de texto com
  highlighting e identação
  automática para criação
  de arquivos python

• Comandos para alterar
  propriedades e execução
  de programas

                                  II Workshop de Software Livre - CIN/UFPE - Recife - PE
                             35
                                                                                           35
Desenvolvimento
      ... E ambientes de
desenvolvimento para Python ?




                       II Workshop de Software Livre - CIN/UFPE - Recife - PE
                  36
                                                                                36
Eclipse
• Aptana PyDev
• Plugin para
  desenvolvimento de
  aplicações Python para o
  Eclipse

• Suporte para Debug,
  UnitTests.

• http://pydev.org/
                                  II Workshop de Software Livre - CIN/UFPE - Recife - PE
                             37
                                                                                           37
Netbeans
• Netbeans >= 6.5
• Plugin para
    desenvolvimento de
    aplicações Python para o
    Netbeans

• Suporte para Debug,
    UnitTests, etc.
•   http://wiki.netbeans.org/PythonInstall




                                                  II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                             38
                                                                                                           38
ActivePython
• ActiveState Python
• Distribuição Python
    completa, instale e execute!

• Diversos plug-ins e suporte
    já ao Python 3.0
•   http://www.activestate.com/activepython/




                                                    II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                               39
                                                                                                             39
EasyClipse
• Distribuição
    customizada do
    Eclipse!

• Distribuição pronta para
    uso, inclusive com o
    ambiente para Python!

• Pydev já vem instalado !
•   http://www.easyeclipse.org/




                                       II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                  40
                                                                                                40
PyCharm
• IDE em Python
    customizada com
    suporte incluso ao
    Django

• Excelente IDE para
    desenvolvimento WEB

• 30 dias gratuito
•   http://www.jetbrains.com/pycharm/




                                             II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                        41
                                                                                                      41
Outros Editores

Notepad++, GEdit, VIM, Emacs, IDLE, Eric IDE,
              TextMate, etc.



Vários editores ao seu dispor compatíveis com Python!




                               II Workshop de Software Livre - CIN/UFPE - Recife - PE
                          42
                                                                                        42
Seu shell incrementado...
• IPython (Disponível para Linux, Mac, Windows)
 • http://ipython.scipy.org/
• BPython (Disponível para Linux e Mac OS)
 • http://bpython-interpreter.org/
• Incrementam o shell do seu interpretador
  Python com auto-complete, highlighting, etc.


                             II Workshop de Software Livre - CIN/UFPE - Recife - PE
                        43
                                                                                      43
Chega de conversa...


• É hora de por a mão na
  massa!




                                II Workshop de Software Livre - CIN/UFPE - Recife - PE
                           44
                                                                                         44
Por onde começo ?
... Criando nosso primeiro Hello World !




                         II Workshop de Software Livre - CIN/UFPE - Recife - PE
                    45
                                                                                  45
... em Python ...


  print “Hello World”




                                                               Exemplos1.py

               II Workshop de Software Livre - CIN/UFPE - Recife - PE
          46
                                                                              46
Tipos e operações
 Vamos ver um trecho de código em
             Python!




                     II Workshop de Software Livre - CIN/UFPE - Recife - PE
                47
                                                                              47
Código Base




               II Workshop de Software Livre - CIN/UFPE - Recife - PE
          48
                                                                        48
... entendendo o código...
• Atribuição utiliza = e comparação utiliza ==




                                II Workshop de Software Livre - CIN/UFPE - Recife - PE
                           49
                                                                                         49
... entendendo o código...
• Atribuição utiliza = e comparação utiliza ==




                                II Workshop de Software Livre - CIN/UFPE - Recife - PE
                           50
                                                                                         50
... entendendo o código...
• Números: + - * / % tem suas funções características
 •   + pode ser usado como concatenação de Strings;

 •   % pode ser usado para formatar Strings (assim como em C).




                                            II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                     51
                                                                                                     51
... entendendo o código...
• Números: + - * / % tem suas funções características
 •   + pode ser usado como concatenação de Strings;

 •   % pode ser usado para formatar Strings (assim como em C).




                                             II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                      52
                                                                                                      52
... entendendo o código...
• Operadores lógicos são palavras e não símbolos (||,
  &&)

 •   and, or, not




                                II Workshop de Software Livre - CIN/UFPE - Recife - PE
                           53
                                                                                         53
... entendendo o código...
• Operadores lógicos são palavras e não símbolos (||,
  &&)

 •   and, or, not




                                II Workshop de Software Livre - CIN/UFPE - Recife - PE
                           54
                                                                                         54
... entendendo o código...
• print é o comando básico para “impressão” na tela




                               II Workshop de Software Livre - CIN/UFPE - Recife - PE
                          55
                                                                                        55
... entendendo o código...
• print é o comando básico para “impressão” na tela




                               II Workshop de Software Livre - CIN/UFPE - Recife - PE
                          56
                                                                                        56
... entendendo o código...
• E se você quiser receber uma entrada diretamente
  do usuário ?

   • raw_input()   - retorna uma string !




                                                                         Exemplos1.py

                                 II Workshop de Software Livre - CIN/UFPE - Recife - PE
                            57
                                                                                          57
... entendendo o código...
• A primeira atribuição em uma variável também é
  responsável por cria-lá.
   •   Os tipos das variáveis não precisam ser informados;
   •   Python descobre o tipo da variável por conta própria!




                                             II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                      58
                                                                                                      58
... entendendo o código...
• A primeira atribuição em uma variável também é
  responsável por cria-lá.
   •   Os tipos das variáveis não precisam ser informados;
   •   Python descobre o tipo da variável por conta própria!




                                             II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                      59
                                                                                                      59
!
 !"#$%&'&'"()**+,-
 ... Usando o Shell
 !   .#/#'&01)/'2$3&/4#56)"'7&4&'481&%&"')'#1/2091&"'%)'
     94'&0:)1&'0#"1#');)791#/'&'7&4#$%&'<%2/=>'?0">@'A9%&'
     )4'.B1(&$'8'&0:)1&C
      ! DDD%2/+<"1/2$E'%)'1)"1)=-
      ! F19%&'"&0/)'"1/2$E"CD
      ! DDD

 !   .#/#'G2"9#*2H#/'#'%&794)$1#5I&'%)'94'?0:)1&'0#"1#'
     );)791#/'&'7&4#$%&'<()*J=
      ! DDD()*J+KLLL-
      ! FM&794)$1#5I&'%&'&0:)1&'N$1)2/&D
      ! DDD



                                     II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                60
                                                                                              60
!
 !"#$%&'&'"()**+,-
 ... Usando o Shell
 !   .#/#'/)0)12/'&'3&4#$%&'#$1)/2&/'0&%)5")
     ! !"#/'#'")1#'0#/#'324#
     ! 62721#/'89:

 !   .#/#'$#;)7#/')$1/)'&"'3&4#$%&'<=')>)3?1#%&"'@#"1#'
     ?"#/'#"'")1#"'0#/#'324#')'0#/#'@#2>&

 !   .#/#'&@1)/'#<?%#'7)/#*')>)3?1#5")'&'3&4#$%&'A()*0+-B
     ! .#/#'"#2/'%&'()*0'AC?21B
     ! .#/#'&@1)/'#'*2"1#'%&"'4D%?*&"'
      A4&%?*)"B
 !   .#/#'2$1)//&40)/'#*7?4'3&4#$%&'A31/*'E'FB
                                    II Workshop de Software Livre - CIN/UFPE - Recife - PE
                               61
                                                                                             61
Whitespace
• Importante para identação e novas linhas
   •   Use  para quando for para uma próxima linha prematuramente.


• Em Python    não há { } !! Isso é para definição de
  dicionários (dict)

• Blocos de código definidos por identação!

                                                                                  Exemplos1.py


                                          II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                   62
                                                                                                   62
Comentários
• Comentários começam com #
   •    Convenção: Você pode definir uma “documentação” em string como
       primeira linha de qualquer nova função que você definir.
   •   Muito importante para o desenvolvedor, crítico para o usuário!




                                            II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                     63
                                                                                                     63
!
 !"#"$%&#'(%)$"*+&*%),-
Conhecendo a linguagem...
 !   .)/"0)$"0&/%&*%),"+"
     ! 12&0,3-
      ! 444"*5*67
      ! 444"*5*8%&(%&9
      ! 444

 !   :-#%&0&/%&*%),"+";*/<-*&2)(%&*$"(%=
     ! >&*?@)(&#*0@+"#*-*%),-;*@(&*@0"*
      A@/B<-
      ! 12&0,3-
        !   444"*5*C)/%D*6=7*E*1FFGHHH
        !   444"*5*)/%C6=7D

                                   II Workshop de Software Livre - CIN/UFPE - Recife - PE
                              64
                                                                                            64
!
 !"#$%&%'(")
 Conhecendo a linguagem...
 !   *+,-.,))/0-1"#$%&%'+,-1"-20.,)
      ! 3%4%
        !   052-%-6-78
      ! 9:2;,5
        !   %-6-7

 !   *+,-.,))/0-#,<%51,)-1"#$%&%204,)-=>?@40,)AB
      ! 3%4%
        !   C$D,-5-6-5"E-C$D,=B8
      ! 9:2;,5
        !   5-6-C$D,=B


                                    II Workshop de Software Livre - CIN/UFPE - Recife - PE
                               65
                                                                                             65
Tipos Básicos
• Inteiros    (padrão para números)
   •   Divisão entre inteiros, resposta um inteiro!


• Inteiros Longos
   •   L ou l no final. (Convertido automaticamente com precisão de inteiros >
       32 bits)


• Floats (ponto flutuante)
   •   1.23, 3.4e-10


• Complexas
   •   >> 2 + 3j

                                                                                     Exemplos1.py
                                              II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                       66
                                                                                                       66
Tipos Básicos
• Representação numérica
    •   Representação de dígitos com/sem formatação de string


• Divisão clássica / base
    •   Uso dos operadores // e /


• Operações em nível de bit
    •   1 << 2 , 1| 2 ,     1&2


• Notações hexadecimal / octal
    •   2 , 0x10 , 0100 , oct(64), hex(255) , int(‘200’), int(‘0100’,8) , int(‘0x40’,16)


• Operações válidas: +, *, >> , ** , pow, abs, round, etc.                               Exemplos1.py
                                                  II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                          67
                                                                                                           67
Tipos Básicos

• Strings
    !
   •   “abc” ou ‘abc’
       !"#$%&'&($)*"+",-.%

       "#$%&'&     ()*&+,&$-(.(/01(
          /01      2.3$+&45.
         /061      ).3$+&$5&785"9
          /:1      )"7$+&45.
         /:61      )"7$+&$5&785"9                     !!!"#$%&!&'()*%
         /661      785"9&;$<=.>$&':+.?.+@3(7"A        !"#$%&'()*$&+&)('#%,$-+.../
          /B61     #7?.+.3>.
         /0:1      #7?.+.3>.
           /7%1    785"9#"#.&#.&$<=.>$%
        /7%&3$>1   #7?.+.3,"&#.&$<=.>$%




                                                                                            Exemplo1.py
       !!!+,(-.#/&0&+1()2%3444/
       '()*%                                            II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                                 68
                                                                                                                 68
Comandos básicos
     !
       !"#$%&'()$*"+),-$.*/0&/%($.
•   Alguns comandos básicos que podem ajudar no ínicio!
     •    dir(element) - todos
         ! 1$"'()$*"#$%&'        os atributos e métodos que estão associados a
         elemento.
          ! 20/3,&'*&,)$*4,/*/.&56/%*/"*#%5"/5%$*
     •      7-$3$*($*"+),-$
         type(element) - Descobrir o tipo do objeto!
     •   import - importe módulos para uso no seu código!
          ! 8$%('*65.96/-*$7:/&$.*/*./,.*%/.#/3&56$.*
            ";&$)$.
                   !"#$%& !"#$%&#
                   !"#$%& !"#$%&#'(&)#
                   !"#$%& !"#$%&#'(&)#!'(!"(&)
                   )     !"#$%&#!!"#$%& !*
                     )   !"#$%&#!!"#$%& !(&)#
                       ) !"#$%&#!!"#$%& !(&)#'+,-"!'(!(+,




                                                  II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                            69
                                                                                                           69
Exercício 01

• Faça um programa que peça 2 números e um real.
   •   Calcule e mostre:
       •   O produto do dobro do primeiro com a metade do segundo
       •   A soma do triplo do primeiro com o terceiro
       •   O terceiro elevado ao cubo




                                             II Workshop de Software Livre - CIN/UFPE - Recife - PE


                                        70
                                                                                                      70
Atribuição
  ... Vamos entender como funciona
              atribuição!




                      II Workshop de Software Livre - CIN/UFPE - Recife - PE
                 71
                                                                               71
Atribuição
•   Atribuição de uma variável em Python significa criar um rótulo
    para armazenar uma referência para algum objeto.
     •   Atribuição cria referências e não cópias!
     •   Inferência do tipo da referência baseado no tipo de dado atribuído


•   A referência é deletada por meio de Garbage Collection
     •   Quando o objeto deixa de ser referenciado por nenhum outro
         rótulo(variável).




                                                 II Workshop de Software Livre - CIN/UFPE - Recife - PE


                                          72
                                                                                                          72
Atribuição
•   Lembre-se que Python a tipagem é dinâmica!
     •   Declarar variáveis sem atribuí-las irá levantar um erro!




                                                  II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                           73
                                                                                                           73
Atribuição
•   Você pode inicializar várias variáveis de uma só vez!
     •   x = y = z = 2.0


•   Rótulos de variáveis são Case Sensitive e não podem iniciar
    com número. Números, letras e underscores são permitidos!
     •   bob bob_2 _bob _2_bob bob_2 BoB


•   Não esquecer das palavras reservadas!




                                       II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                  74
                                                                                                74
Atribuição
•   Entendendo manipulação de atribuição de referências
     •   x = y não significa que você fez uma cópia de y!
     •   x = y o que realmente faz é x referencia ao objeto que y referencia!


•   O que realmente acontece por trás dessa simples atribuição:




                                                II Workshop de Software Livre - CIN/UFPE - Recife - PE


                                         75
                                                                                                         75
Atribuição
•   Mas e se fizermos isso ?! Qual será o valor de x ?
>>> x = “casa”
>>> y = x
>>> x = “fazenda”
>>> print x




                                      II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                 76
                                                                                               76
Atribuição
•    Mas e se fizermos isso ?! Qual será o valor de x ?
    >>> x = “casa”
    >>> y = x
    >>> y = “fazenda”
    >>> print x

•    Do mesmo jeito que nós esperávamos! Dados nativos são
     imutáveis! (String, Inteiros, float, complexos).
>>> x = “casa” #cria 3, x referencia ao objeto string “casa”
>>> y = x         # Cria variavel y, referencia ao objeto string “casa”
>>> y = “fazenda” #Cria referencia ao objeto string “fazenda”
>>> print x          # Nenhum efeito em x, ainda referencia “casa”
>>> casa
                                                    II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                             77
                                                                                                             77
Listas, Strings e Tuplas
    ... O poder de python agora!




                      II Workshop de Software Livre - CIN/UFPE - Recife - PE
                 78
                                                                               78
Listas, Strings e Tuplas
•   Todos os três são Sequências!
     •   Podem ser indexados por algum valor ordinal posicional
     •   Todas as operações apresentadas aqui nesta seção podem ser aplicadas em
         todos os tipos de sequência


•   Listas
     •   li = [1,2,3, ‘abc’]


•   Tuplas
     •   li = (23, ‘abc’, 4.56, (2,3), ‘def’)


•   Strings
     •   st = “Hello World” st = ‘Hello World’
                                                                                               Exemplos2.py

                                                     II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                                79
                                                                                                              79
Listas, Strings e Tuplas

•   Manipulando sequências!
     •   Pelo índice a partir de 0    Ex: ti [0]
     •   Índices podem ser positivos ou negativos! Ex: ti[1] (esq.) ti[-4] (dir.)


•   Fracionamento e matrizes!
     •   li[1:3] L[1:] matrix = [[1,3,4] , [3,5,6] , [7,8,9]]


•   Operador in
     •   retorna um booleano. Checa se um valor está em uma sequência!
         •   4 in li


                                                                                             Exemplos2.py

                                                   II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                            80
                                                                                                            80
!
Listas, Strings e Tuplas
 !"#$%#&'&%()##%*+,&"$)*#

 !   -*+"()&.,#"$"/,#&)&*)0%$"/,#
 !!!"#$#%&'(')'*'+,#!"#$%&'()*%)+$,-%
 !!!"%-,
 &
 !!!"%(,
 )
 !!!"%.&,
 +
 !!!"%.),
 )
 !!!"%&/,
 %(')'*'+,
 !!!"%/),
 %&'('),
 !!!"%&/*/(,#!%"#.,"$*()()/%,,(0)"(+.-%1,.)/2+%3*()*.)4).5)4
 %('*,
 !!!"%//.&,
 %+'*')'('&,#!/%,,()3.6%-$7()$37.#-.)%),.8293"$%


                                                                                      Exemplos2

                                          II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                    81
                                                                                                   81
Operacões em Listas
•   Operador + , *
     •   a = “Hello” + “ World” (concatenação)
     •   [3] * 4 (repetição)


•   Operador len() e append()
     •   len() - retorna um inteiro com o tamanho da sequência!
     •   append() - adiciona um elemento ao final da lista!


•   Atribuição
     •   list[0] = ‘3’

     • Fazendo cópias de sequência , Cuidado!!!
                                                                                           Exemplos2.py

                                                 II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                         82
                                                                                                          82
Operacões em Listas
•   Qual será o valor de b ?
>>> a = [1,2,3]
>>> b = a
>>> a.append(4)
>>> print b




                                    II Workshop de Software Livre - CIN/UFPE - Recife - PE
                               83
                                                                                             83
Operacões em Listas
•    Qual será o valor de b ?

>>> a = [1,2,3]
>>> b = a
>>> a.append(4)
>>> print b

•    Surpresa!

    >>> b = [1,2,3,4]


•    Dados do tipo listas, dicionarios e pré-definidos pelo usuário
     são mutáveis!


                                       II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                  84
                                                                                                84
Operacões em Listas




                 II Workshop de Software Livre - CIN/UFPE - Recife - PE
            85
                                                                          85
Operacões em Listas
•   Para fazer cópias de listas
     •   a = b[:] (2 cópias independentes)
     •   a = b (os 2 referenciam o mesmo objeto)


•   Qual a diferença entre listas e tuplas ?
     •   Listas são mutáveis e Tuplas imutáveis!
     •   l = [1,‘abc’,4] t = (1,‘abc’,4,5)


•   Atribuição em listas e tuplas
     •   list[0] = ‘3‘ ok!
     •   t[0] = 3 NOK!!! (Deve-se criar uma nova tupla! - t = (3, ‘abc’,4,5)


                                                                                             Exemplos2.py

                                                   II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                             86
                                                                                                            86
Tuplas x Listas
!
   • Listas
 !"#$%& são mais lentas porém mais poderosas que tuplas
             •    Listas podem ser modificadas e tem diversos operadores que podem ser
                  utilizados
 !   '(%)*+%,-.)-/*0"%*&/%/$*&)%&1/+2,/",%/3*4-(-.5%/&")*$1/
             •  Tuplas são imutáveis e tem menos funcionalidades!
     &62/*,")78-*&

 !   /9&%:&-/%/4".562/)"#$-;</#%(%/)(%.&42(,%(/2")(2&/)*#2&/
       •
     -,/)"#$%& converter entre listas e tuplas ?
           Para
                 !!!"#$#%&'(')'*'+,
                 !!!-./012"3
                 2&'(')'*'+3
                 !!!045-2-./012"33
                 %&'(')'*'+,
                 !!!610/2-./013#!"#$%&%'#"())
                                                                                                  Exemplos2.py

                                                        II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                                 87
                                                                                                                 87
!
 Exercício 02
 !"#$%&%'()*+*

 !   ,(-.$#/0#)1-)-#23'4.#)5'-.1-6)7#$'8171-)7#9
     ! :;6*6<6=6>6?6@6A6B6C6*;6**6*<6*=6*>6*?D
        !   E4.#$815()7#)*)1)C
        !   E4.#$815()7#)B)1)*=
        !   FG0#$(-)H1$#-
        !   FG0#$(-)&0H1$#-
        !   I(7(-)(-)0G5.'H5(-)7#)<6)=)#)>
        !   J'-.1)$#8#$-1
        !   K1LM()#4.$#)1)-(01)7()'4.#$815()7#)*;)1)*?)H#5()
            '4.#$815()7#)=)1)C)#0)N5(1.O




                                        II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                  88
                                                                                                 88
Métodos muito usados

•   append(), insert(), extend(), del()

•   min(), max()

•   index(), count(), remove(), pop()

•   reverse() , sort()

•   etc.


                                                                                    Exemplos2.py

                                          II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                  89
                                                                                                   89
Strings

•   Formatação e conversão de Strings

•   Usam os mesmos operadores básicos de lista

•   Multi-Strings, Strings com aspas simples e duplas

•   Caracteres Speciais e str() e unicode()



                                                                                 Exemplos2.py

                                       II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                  90
                                                                                                90
Strings
•   Também uma sequência e é Imutável!
     •   “42” + 1 (erro!) Use “42” + str(1)
     •   float(), int() -> string para numéro


•   Atribuição
     •   S = ‘spam’ S[0] = ‘x’ ERRO!!!
     •   Strings são imutáveis!
     •   String -> Lista -> String (.join)


•   Formatação de string


                                                                                            Exemplos2.py

                                                  II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                             91
                                                                                                           91
Métodos mais usados

•   find(), replace(), join(), split()

•   isdigit(), islower(), strip(),

•   startswith(), upper(), lower()

•   etc.



                                                                                       Exemplos2.py

                                             II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                        92
                                                                                                      92
Exercício 03
•   Crie uma lista com o nome de 10 pessoas e sorteie uma
    pessoa, depois embaralhe novamente e sorteie outra (sem
    repetição)

    • Dica: help(random) - módulo para
      aleatoriedade.

•   Faça um programa que permita ao usuário digitar o nome
    e em seguida mostrar ao usuário de trás pra frente
    somente em letras maiúsculas.

    • Dica: Procure pela documentação do
      help(“”) !

                                    II Workshop de Software Livre - CIN/UFPE - Recife - PE
                               93
                                                                                             93
Dicionários
    Um “hash map” pythonico!




                    II Workshop de Software Livre - CIN/UFPE - Recife - PE
               94
                                                                             94
Dicionários

•   Estrutura de dados em forma de coleções onde os items são
    armazenados e buscados pela chave em vez do deslocamento
    posicional.
     •   Chaves podem ser quaisquer objetos do tipo imutável
     •   Valores podem ser de qualquer tipo
     •   Um dicionário pode armazenar diferentes tipos de valores e é mutável!


•   Criando e modificando dicionários!
     •   d = {“user” : “Marcel” , “password”: 2342}



                                                                                           Exemplos3.py

                                                 II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                          95
                                                                                                          95
Dicionários

•   Dicionários não são ordenados!
     •   Uma nova chave pode aparecer em qualquerr lugar
     •   Funciona como “hashing”


•   Algums métodos:
     •   has_key(‘eggs’) , clear() , del d[‘key’] , keys(), values(), items(), get() , update()
     •   copy() fazer cópias de dicionários ! (Lembre-se que dicionario é mutável!)




                                                                                                Exemplos3.py

                                                      II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                              96
                                                                                                               96
Arquivos
 Como é fácil manipular um arquivo!




                      II Workshop de Software Livre - CIN/UFPE - Recife - PE
                 97
                                                                               97
Arquivos

•   Apenas uma linha para abrir um arquivo!
     •   file = open(“data”, ‘r’)      tipos: r, a, w


•   Alguns métodos para operações em arquivos:
     •   file.read(), readline(), readlines(),
     •   file.write(), writelines(),
     •   file.close()




                                                                                                 Exemplos3.py

                                                       II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                                98
                                                                                                                98
Booleanos
     Expressões lógicas




                  II Workshop de Software Livre - CIN/UFPE - Recife - PE
             99
                                                                           99
Expressões lógicas

•   True e False são constantes em Python
     •   False : 0, None, [] , {} , 0.0
     •   True: Valores Numéricos exceto 0, objeto não vazios
     •   Um dicionário pode armazenar diferentes tipos de valores e é mutável!


•   Operadores de comparação: ==, != , < , <=, etc.
     •   X == Y ( efetua teste de equivalência de valor)
     •   X is Y (Testa a identidade do objeto)




                                                                                           Exemplos3.py

                                                 II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                          100
                                                                                                          100
Expressões lógicas

•   None é similar ao NULL em linguagem C
     •   L = [None] * 100 (declara uma lista de 100 items None )


•   Operações com or e and
     •   not -> inversão lógica (true -> false , false -> true)
     •   and e or (&& e II)


•   isinstance(element,type)
     •   Verifica se um elemento é do tipo type


                                                                                               Exemplos3

                                                   II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                           101
                                                                                                            101
Exercício 03




                     II Workshop de Software Livre - CIN/UFPE - Recife - PE
               102
                                                                              102
Exercício 04




                     II Workshop de Software Livre - CIN/UFPE - Recife - PE
               103
                                                                              103
Instruções compostas
      If python == “cool”:
            print “Oh yeah!”




                     II Workshop de Software Livre - CIN/UFPE - Recife - PE
               104
                                                                              104
Fluxo de Controle

•   Várias expressões Python para controlar o fluxo do programa.
    Todos eles fazem uso de testes condicionais booleanos.
     •   ifs, else
     •   loops while, for




                                     II Workshop de Software Livre - CIN/UFPE - Recife - PE
                               105
                                                                                              105
Instruções if




                                                                  Exemplos4

                      II Workshop de Software Livre - CIN/UFPE - Recife - PE
                106
                                                                               106
Instruções while




                                                               Exemplos4

                   II Workshop de Software Livre - CIN/UFPE - Recife - PE
             107
                                                                            107
Instruções while
•   Você pode usar o comando break para sair do loop mais
    próximo que a envolve.

•   Você pode usar o comando continue para pular para o ínicio do
    loop mais próximo que a envolve e pular para a próxima
    iteração.

•   Você pode usar o comando pass quando você não quer que se
    faça nada (instrução vazia)

•   Você pode o o bloco else do loop para quando se quer executar
    um código quando se sai normalmente do loop (sem ser por
    comando break)
                                                                               Exemplos4.py

                                     II Workshop de Software Livre - CIN/UFPE - Recife - PE
                               108
                                                                                              108
Instruções for
•   Loops for iteram sobre uma sequência de items (listas, tuplas,
    string ou quaisquer outros objetos cuja a linguagem considere
    como um “iterator”)

•   Várias maneiras de iterar sobre um conjunto de items!

•   Também possui o bloco else quando se sai normalmente do
    loop (similar ao while)

•   Função muito usada nos loops for: range()
     •   range() - Retorna uma lista de números que varia de 0 a ao número passado
         como parâmetro.
                                                                       Exemplos4.py

                                               II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                        109
                                                                                                        109
Instruções for




                   II Workshop de Software Livre - CIN/UFPE - Recife - PE
             110
                                                                            110
Instrução zip
•   A função range() percorre sequências de maneira exaustiva. A
    função interna zip permite usar loops for para visitar várias
    sequências em paralelo.

•   zip() é bastante poderoso, pode unir sequências onde retorna
               !
    uma lista de tuplas que se distribuem em pares os items
    paralelos extraídos dessas sequências.

•   Permite também facilitar a construção de dícionarios!
               !

     •   x = dict(zip(kes,vals))
                     !
                         !
                         !
                         !
                         !
                         !                                                         Exemplos4.py
                         !
                                         II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                   111
                                                                                                  111
Compreensão de listas
    [i for i in “python é fácil demais”]




                       II Workshop de Software Livre - CIN/UFPE - Recife - PE
                 112
                                                                                112
Compreensão de listas
    !
      !"#$%&&'()"*+&*,-(./( linguagem Python
•   Funcionalidade muito poderosa da
     • 01.2"'*(3$"%./*4"#$%&(()"*+&*,-(./(5*4%-/*,-(./(*+&*6"%#/* da lista original.
         Gera uma lista nova aplicando uma função para cada elemento
     • 674-,*&*%7$-+/8*9*3("*+&*4"#$%&(()"*+&*,-(./(*:*;&#* de código!)
     !
         Muito usado por programadores Python! (Economia
         4"#3#*&#*#/.&#7.-4/8

•   A !sintaxe da compreensão de lista usa-se de palavra-chaves:
        0"%*&<&#$,"
          ! =*>*?<@*A*<*-'*?B*888*CDD

             •   [expression for name in list]
          ! E*>*?<*F*<*-'*=*/'+*<*&G&'D

     !   H#*$1.2"'*.&#"(
          ! III(*>*J<KKL*6"%*<*-'*%/'M&NOBPQ
          ! III#*>*J<*6"%*<*-'*(*-6*<RL*>>*BQ


                                                                                         Exemplos4.py

                                               II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                        113
                                                                                                        113
Compreensão de listas


•   Permite também o uso de filtros (deteminam se uma
    determina expressão deve ser executada sobre um membro da
    !
    lista)
     !"#$%&&'()"*+&*,-(./(012

     !
                •    [expression for name in list if filter ]
         3.-,-4/%*+-5-"'6%-"(7*&8&#$,"9
             ! :::+;<=>",?=9@AAAA7=5&,./=9BCAAA7=D-,E8=9FGAAA7
               =?E(5/=91AAAH
             ! :::$"((-I-,-+/+&(J%-5"*;*K5/%*?"%*5/%*-'*+*-?*+K5/%L*
               M*NAAAAL
             ! :::$"((-I-,-+/+&(J$"I%&*;*K5/%*?"%*5/%*-'*+*-?*
               +K5/%L*M*1AAL                                                               Exemplos4.py
     !   O#*(.%-'>(
                                              II Workshop de Software Livre - CIN/UFPE - Recife - PE
            ! :::*'"#&*;*=P'P'*QQ*OQP'QQ(Q.QP'P'QP'/*
                                          114
              ?Q%P'P'/QQQ(P'&*P.-QQ'RQQ/Q*Q(QQEP'QSP'&QQP
              'P'Q-P'%QQ/QT***P'QQ*P'P'P'P'=                                                              114
Exercício 05

• Faça
!         um programa que imprima na tela apenas os
  números ímpares entre 1 e 50 (usando compreensão de
 !"#$%&%'()*+*
  listas!)

 !   ,#-.()/01)2'341)5#)-(0#3)5#)%2133#3)(3)6/1'3)#347()
     #3%$'4(3)-()#34'2()/-5#$2'-#)89-(0#:(/4$(:-(0#;<)#)
     1=($1)0/5(/>3#)()?15$7()?1$1)@10#2@13#+)A#5#>3#)/0)
     2'341)%(0)(3)-(0#3)4(5(3)#0)@10#2@13#+
          ! BBB2'341:-(0#:%2133#3CD94#21:?$'-%'?12;E;01?1:5
            #:5'3?(3'4'F(3;E;%2133#:-#=(%'(:?#315(;E;1%/0/21
            5($;E;G'0:51:2'341:5#):5#:%2133#3:5(:#"#$%'%'(;H
     ! I'%1J
       ! K3#)13)G/-LM#3)34$+4'42#)#)34$+3?2'4

                                              II Workshop de Software Livre - CIN/UFPE - Recife - PE
 !   N#?(341O                          115
        ! $#3?(341)C)DPP+Q('-8DR+4'42#8<)G($)R)'-)SH<)G($)S)'-)                                        115
Funções
...Seu programa tendo cara de programa!




                         II Workshop de Software Livre - CIN/UFPE - Recife - PE
                   116
                                                                                  116
Definindo Funções
Definição da função inicia com “def ”




                                             II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                       117
                                                                                                      117
Definindo Funções
Definição da função inicia com “def ”   Nome da função




                                             II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                       118
                                                                                                      118
Definindo Funções
Definição da função inicia com “def ”   Nome da função                       Argumentos




                                             II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                       119
                                                                                                      119
Definindo Funções
Definição da função inicia com “def ”   Nome da função                       Argumentos




   Identação




                                             II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                       120
                                                                                                      120
Definindo Funções
Definição da função inicia com “def ”   Nome da função                        Argumentos




   Identação




                                              “return” indica o
                                             retorno da função




                                              II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                       121
                                                                                                       121
Definindo Funções
Definição da função inicia com “def ”   Nome da função                        Argumentos




   Identação




                                              “return” indica o
                                             retorno da função


    Sem header file
    Sem declaração do tipo de retorno da função ou do tipo dos argumentos


                                              II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                       122
                                                                                                       122
Chamando uma função
•   Sintaxe básica para chamar uma função:



                    >>> def myfun(x, y):
                            return x * y
                    >>> myfun(3, 4)
                    12




                                                                                Exemplos5.py

                                      II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                123
                                                                                               123
Passagem de parâmetros
•   Várias métricas podem ser usadas na passagem dos parâmetros
    de uma função:


                    >>> def myfun(x, y):
                            return x * y
                    >>> myfun(3, 4)
                    12
                    >>> myfun(y=3, x=4)
                    12
                    >>> myfun(3, y=4)
                    12

                                                                               Exemplos5.py

                                     II Workshop de Software Livre - CIN/UFPE - Recife - PE
                               124
                                                                                              124
Parâmetros com valores padrões
•   Cada parâmetro pode ter um valor padrão.
    •   Utilizado quando um parâmetro é omitido na chamada da função

         def myfun(x, y = 0.3, prompt = True):
             res = x * y
             if prompt:
                 print “Resposta é %f”, res

              return res




                                                                                          Exemplos5.py

                                                II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                         125
                                                                                                         125
Parâmetros com valores padrões
        def myfun(x, y = 4, prompt = True):
            res = x * y
            if prompt:
                print “Resposta é %i”, res

             return res


•   Esta função pode ser invocada de várias formas:
         >>> myfun(3)
         Resposta é 12
         12
         >>> myfun(x=3, prompt = False)
         12
         >>> myfun(5, 2, False)
         10                                                                     Exemplos5.py

                                      II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                126
                                                                                               126
Valor de retorno
•   Toda função em Python retorna alguma valor;
    •   Mesmo funções que não possuem a cláusula return.



•   Funções que não possuem return retornam None.
    •   None é uma constante especial definida na linguagem;

    •   Similar a NULL, void, ou nil em outras linaguagens;

    •   É lógicamente equivalente à False;

    •   O interpretador não imprime None.




                                                   II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                             127
                                                                                                            127
Valor de retorno
•   Uma função pode retornar mais de um valor

                  >>> def teste():
                          x = 1
                          y = 2
                          z = 3

                            return x, y, z

                  >>>   x, y, z = teste()
                  >>>   ret = teste()
                  >>>   ret
                  (1,   2, 3)
                                                                              Exemplos5.py

                                    II Workshop de Software Livre - CIN/UFPE - Recife - PE
                              128
                                                                                             128
Algumas funções especiais
... e Python também tem seu momento funcional!




                             II Workshop de Software Livre - CIN/UFPE - Recife - PE
                       129
                                                                                      129
Parâmetros args




                                                                             Exemplos5.py

                    II Workshop de Software Livre - CIN/UFPE - Recife - PE
              130
                                                                                        130
Funções map, reduce e filter

•   Função map(func, seq)
    •   Função interna que aplica uma função func a cada item de um objeto sequência
        (seq) e retorna uma lista com os resultados da chamada da função.



•   Função filter(func, seq)
    •   Função interna que aplica uma função filtro func a cada item de um objeto
        sequência (seq) e retorna uma lista com os resultados que satisfazem os critérios
        da função de teste seq.



                                                                                             Exemplos5.py

                                                   II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                           131
                                                                                                            131
Módulos
... Módulos: o que é, como criar e como utilizar.




                              II Workshop de Software Livre - CIN/UFPE - Recife - PE
                        132
                                                                                       132
Introdução 1/2
•   Quando você encerra o interpretador, todas as definições de
    variáveis e funções são perdidas;
    •   Solução é gerar um script e roda-lo.



•   Mas e se você desejar utilizar um determinada função do script
    em outro programa?

    •   Solução são os módulos!




                                                     II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                               133
                                                                                                              133
Introdução 2/2
•       Um módulo é um arquivo .py contendo definições e comandos
        Python:
    •    Funções

    •    Variáveis e constantes

    •    Classes

    •    ...

•       Vantagem é a possibilidade de adicionar todas estas definições
        em outros arquivos ou módulos.
    •    Isto é feito utilizando a cláusula import




                                                     II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                               134
                                                                                                              134
Executando módulos como scripts
•   Rodar um módulo Python é similar a importar as definições do
    módulo para o interpretador.
    •   Se você fizer python meuModulo.py irá carregar as definições e destruir
        logo em seguida!


•   Para executar algum determinado código de maneira similar à
    um script você deve testar a cláusula __name__ :

                    if __name__ == “__main__”:
                        print “Execute algum código”



                                                                                      Exemplos5.py

                                            II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                      135
                                                                                                     135
Pacotes
•   Pacotes são coleções de módulos Python.
    •   Qualquer diretório do sistema operacional que contém um arquivo __init__.py
        dentro é considerado um pacote.

    •   Pacotes organizam módulos e permitem que programadores importem módulos
        da seguinte maneira:

          •   import meuPacote.meuSubPacote.meuModulo


                 # meuPacote/
                 #    __init__.py -- vazio
                 #    meuSubPacote/
                 #       __init__.py -- vazio
                 #       meuModulo.py -- modulo importado




                                                II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                         136
                                                                                                         136
Caminho de busca dos módulos
•       Quando você executa import meuModulo o interpretador
        procura pelo arquivo meuModulo.py seguindo uma determinada
        regra.
    •    Primeiramente ele procura pelo arquivo no diretório corrente (onde o interpretador
         foi executado).

    •    Caso ele não encontre o arquivo no diretório corrente, a busca prossegue em uma
         lista de diretórios que é especificada na variável sys.path

•       Você pode atribuir novos diretórios de busca na variável
        sys.path (ela é uma lista dentro do módulo sys da biblioteca
        padrão)
    •    Útil quando você quer instalar seu módulo na máquina de um usuário.




                                                     II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                             137
                                                                                                              137
Compilando um módulo Python
... Compilando??? Como assim??? Python não é
                interpretado???




                            II Workshop de Software Livre - CIN/UFPE - Recife - PE
                      138
                                                                                     138
Compilando um módulo Python
•       Sim, Python é e continua sendo interpretada!
    •    Python utiliza o conceito de byte-code (muito conhecido em Java).



•       O que acontece quando você importa um módulo:
    •    1) - Interpretador busca pelo arquivo .py correspondente;

    •    2) - Arquivo .py é “compilado” para o byte-code reconhecido pelo interpretador;

    •    3) - Byte-Code é incorporado a tabela de símbolos correntes do interpretador.




                                                      II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                              139
                                                                                                               139
Compilando um módulo Python
•       Compilação para byte-code pode ser um gargalo de
        desempenho quando você carregar um programa!
    •    Especialmente se você utiliza muitos módulos em seu programa.



•       Solução é pré-compilar os módulos antes de rodar seu
        programa!




                                                    II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                             140
                                                                                                             140
Exercício 06
•




                         II Workshop de Software Livre - CIN/UFPE - Recife - PE
                   141
                                                                                  141
QuickSort
•   Algoritmo de ordenação bastante utilizado e muito eficiente

    •   Complexidade BigO(nlogn)

        1 . Escolher um pivô inicial x;

        2. Colocar todos itens com chave menor que a de x à esquerda de x, formando
        uma seqüência S1;

        3. Colocar todos itens com chave maior que a de x à direita de x, formando uma
        seqüência S2;

        4. Isto feito, o mesmo processo é aplicado às seqüências S1 e S2, que por sua vez
        produzirão novos segmentos;

        5. O processo deve ser aplicado sucessivamente às seqüências enquanto
        elas tiverem tamanho ≥ 1;




                                                       II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                               142
                                                                                                                142
QuickSort
•   Você pensaria assim...


def partition(list, l, e, g):
    if list == []:
        return (l, e, g)
    else:
        head = list[0]
        if head < e[0]:
            return partition(list[1:], l + [head], e, g)
        elif head > e[0]:
            return partition(list[1:], l, e, g + [head])
        else:
            return partition(list[1:], l, e + [head], g)




                                           II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                     143
                                                                                                    143
QuickSort
•     Agora que você sabe compreensão de listas, você pode fazer
      assim!

    def qsort(L):
        if len(L) <= 1: return L
        return qsort( [ lt for lt in L[1:] if lt < L[0] ] ) +                                  [ L[0] ]            + 
               qsort( [ ge for ge in L[1:] if ge >= L[0] ] )




•    E não é que lembra a linguagem funcional Haskel ?!
                    # qsort [] = []
                    # qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
                    #                 where
                    #                   elts_lt_x = [y | y <- xs, y < x]
                    #                   elts_greq_x = [y | y <- xs, y >= x]




                                                                II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                                     144
                                                                                                                         144
Ordenação
•   Mas um programador Pythonico, ainda faria mais eficiente!


    list.sort()




•   Utiliza-se de uma implementação nativa de Python para
    ordenação de sequências! Mais eficiente, híbrido com
    complexidade no pior caso de nlogn.




                                      II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                145
                                                                                               145
Python é muito poderoso!
•   Não precisa reinventar a roda! Molde-a para adaptar ao seu
    problema!




•   A documentação de Python é bastante vasta e há muitas
    funcionalidades prontas!

                                    II Workshop de Software Livre - CIN/UFPE - Recife - PE
                              146
                                                                                             146
Chegamos ao fim! =D




Hora da random.choice([pergunta, dúvida, discussão]) !!

                               II Workshop de Software Livre - CIN/UFPE - Recife - PE
                         147
                                                                                        147
Referências

•   I Workshop CINLUG de Python (Ministrado no CIN)
     •   http://www.cin.ufpe.br/~cinlug/files/workshop-python.1.pdf
     •   http://www.cin.ufpe.br/~cinlug/files/workshop-python.2.pdf


•   Mini-Curso de Introdução a Python (Avaty Tecnologia e Info.)
     •   http://www.avaty.com.br/artigos/CURSO-PYTHON.pdf




                                                II Workshop de Software Livre - CIN/UFPE - Recife - PE
                                        148
                                                                                                         148
Hello, I am Python!
           Marcel Caraciolo
  Mini-Curso De Introdução a Python




                       II Workshop de Software Livre - CIN/UFPE - Recife - PE
                 149
                                                                                149

Mini-Curso de Python dia 21/03 (Segunda-Feira) no II Workshop de SL do CIN/UFPE

  • 1.
    Hello, I amPython! Marcel Caraciolo Mini-Curso De Introdução a Python II Workshop de Software Livre - CIN/UFPE - Recife - PE 1 1
  • 2.
    Quem é oinstrutor ? • Marcel Pinheiro Caraciolo - @marcelcaraciolo • Sergipano, porém Recifense. • Diretor de Pesquisa e Desenvolvimento da Orygens • Mestrando em Ciência da Computação no CIN/UFPE na área de mineração de dados • Membro e Moderador da Celúla de Usuários Python de Pernambuco (PUG-PE) • Minhas áreas de interesse: Computação móvel e Computação inteligente • Meus blogs: http://www.mobideia.com (sobre Mobilidade desde 2006) http://aimotion.blogspot.com (sobre I.A. desde 2009) Jovem Aprendiz ainda nas artes pythonicas.... (desde 2007) II Workshop de Software Livre - CIN/UFPE - Recife - PE 2 2
  • 3.
    !"#$ O que éPython ? Por que Python? II Workshop de Software Livre - CIN/UFPE - Recife - PE 3 3
  • 4.
    !"#$ Por quePython É fácil II Workshop de Software Livre - CIN/UFPE - Recife - PE 4 4
  • 5.
    !"#$ Por que éfácil • Semelhança com pseudo-código. II Workshop de Software Livre - CIN/UFPE - Recife - PE 5 5
  • 6.
    Hello World Classíco ...‘hello world’ - Python vs { Java, C, PHP e Pascal } II Workshop de Software Livre - CIN/UFPE - Recife - PE 6
  • 7.
    Hello World Classíco ....Em Python .... print “Hello World” II Workshop de Software Livre - CIN/UFPE - Recife - PE 7
  • 8.
    Por que Python Éfácil É poderoso II Workshop de Software Livre - CIN/UFPE - Recife - PE 8 8
  • 9.
    Canivete suíço Tipagem dinâmica Bibliotecapadrão completa Multi-paradigma Multi-plataforma Facilmente extensível Free Software (GPL) II Workshop de Software Livre - CIN/UFPE - Recife - PE 9
  • 10.
    Por que époderoso • Python para Web • Web é presente -> Futuro! • Django (http://www.django.org) • Zope (http://www.zope.org) • Plone (http://www.plone.org) • Turbogears (http://www.turbogears.org) • Web2Py (http://www.web2py.com) II Workshop de Software Livre - CIN/UFPE - Recife - PE 10 10
  • 11.
    Web http://www.nationalgeographic.com/ II Workshop de Software Livre - CIN/UFPE - Recife - PE 11 11
  • 12.
    Web http://globo.com II Workshop de Software Livre - CIN/UFPE - Recife - PE 12 12
  • 13.
    Por que époderoso • Python para gestão empresarial • PyGTK (http://www.pygtk.org) • PyQT (http://qt.nokia.com) • MySQL, PostgreSQL, Oracle, Sqlite II Workshop de Software Livre - CIN/UFPE - Recife - PE 13 13
  • 14.
    Aplicativos Desktop http://www.stoq.com.br/ http://taskcoach.org/ II Workshop de Software Livre - CIN/UFPE - Recife - PE 14
  • 15.
    Aplicativos Desktop Python + Qt + Qml II Workshop de Software Livre - CIN/UFPE - Recife - PE 15
  • 16.
    Python é multi-plataforma • Python em dispositivos móveis • Python for Symbian (PyS60), PySide (Maemo), ASE (Android) II Workshop de Software Livre - CIN/UFPE - Recife - PE 16
  • 17.
    Android (ASE) http://code.google.com/p/android-scripting/ II Workshop de Software Livre - CIN/UFPE - Recife - PE 17 17
  • 18.
    Por que époderoso NetworkX http://pypi.python.org/pypi II Workshop de Software Livre - CIN/UFPE - Recife - PE 18
  • 19.
    Python é multi-plataforma • PyMT • Python Multi Touch • Especialmente criado para ambientes multi-touch http://pymt.eu/ II Workshop de Software Livre - CIN/UFPE - Recife - PE 19
  • 20.
    PyGame e Jogos http://www.pygame.org/news.html II Workshop de Software Livre - CIN/UFPE - Recife - PE 20
  • 21.
    Aplicativos Desktop http://www.blender.org/ II Workshop de Software Livre - CIN/UFPE - Recife - PE 21
  • 22.
    Quem usa Python? II Workshop de Software Livre - CIN/UFPE - Recife - PE 22 22
  • 23.
    ... e aquino Brasil também! II Workshop de Software Livre - CIN/UFPE - Recife - PE 23
  • 24.
    Python entre as10 + ! http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html II Workshop de Software Livre - CIN/UFPE - Recife - PE 24
  • 25.
    O que épython ? É fácil É poderoso II Workshop de Software Livre - CIN/UFPE - Recife - PE 25
  • 26.
    O que épython ? É fácil É poderoso É divertido II Workshop de Software Livre - CIN/UFPE - Recife - PE 25
  • 27.
  • 28.
    Hun, sei oque é Python! ...E agora como eu começo ? II Workshop de Software Livre - CIN/UFPE - Recife - PE 27
  • 29.
    Instaladores • Interpretador Python disponível para diversas plataformas. • Windows, Unix, Linux, etc. • Para usuários Windows, é necessário o download do SDK! • http://www.python.org/download/ II Workshop de Software Livre - CIN/UFPE - Recife - PE 28 28
  • 30.
    Instaladores • Atualmente Python está na versão 2.7.1 / 3.2 • No Python 3.0 houve mudanças críticas! 2.7.x suaviliza a transição para os desenvolvedores (Muitos frameworks ainda escritos para Python 2.x) II Workshop de Software Livre - CIN/UFPE - Recife - PE 29 29
  • 31.
    Instaladores (Windows) II Workshop de Software Livre - CIN/UFPE - Recife - PE 30 30
  • 32.
    Instaladores (Windows) • Não esqueça de adicionar o caminho da instalação no PATH do sistema! • ;C:Python2x Windows 7 • >>> 2 + 3 Approved! • >>> 5 II Workshop de Software Livre - CIN/UFPE - Recife - PE 31 31
  • 33.
    Instaladores • E enquanto no Linux e Unix ? • Estas distribuições já disponibilizam para você de forma nativa! • Prompt do python “>>>”: • Para sair: • No Unix, digite CONTROL-D • No Windows, digite CONTROL-Z + ENTER II Workshop de Software Livre - CIN/UFPE - Recife - PE 32 32
  • 34.
    Vamos executar! ...E agoracomo eu crio meu programa em python ? II Workshop de Software Livre - CIN/UFPE - Recife - PE 33 33
  • 35.
    Rodando Programas noUnix • Os arquivos python tem finalização .py! %python filename.py • Você pode usar qualquer editor de texto para codificar o seu código! • No Windows : Clássico Notepad ou o IDLE... • No Mac OS/Linux: VI, TextEdit, GEdit, TextMate ... Para tornar o arquivo *.py executável: #!/usr/bin/python Para aceitar textos com acentos e caracteres especiais: # -*- coding: utf-8 -*- II Workshop de Software Livre - CIN/UFPE - Recife - PE 34 34
  • 36.
    Ambiente IDLE • AmbienteShell de desenvolvimento básico • Editor de texto com highlighting e identação automática para criação de arquivos python • Comandos para alterar propriedades e execução de programas II Workshop de Software Livre - CIN/UFPE - Recife - PE 35 35
  • 37.
    Desenvolvimento ... E ambientes de desenvolvimento para Python ? II Workshop de Software Livre - CIN/UFPE - Recife - PE 36 36
  • 38.
    Eclipse • Aptana PyDev •Plugin para desenvolvimento de aplicações Python para o Eclipse • Suporte para Debug, UnitTests. • http://pydev.org/ II Workshop de Software Livre - CIN/UFPE - Recife - PE 37 37
  • 39.
    Netbeans • Netbeans >=6.5 • Plugin para desenvolvimento de aplicações Python para o Netbeans • Suporte para Debug, UnitTests, etc. • http://wiki.netbeans.org/PythonInstall II Workshop de Software Livre - CIN/UFPE - Recife - PE 38 38
  • 40.
    ActivePython • ActiveState Python •Distribuição Python completa, instale e execute! • Diversos plug-ins e suporte já ao Python 3.0 • http://www.activestate.com/activepython/ II Workshop de Software Livre - CIN/UFPE - Recife - PE 39 39
  • 41.
    EasyClipse • Distribuição customizada do Eclipse! • Distribuição pronta para uso, inclusive com o ambiente para Python! • Pydev já vem instalado ! • http://www.easyeclipse.org/ II Workshop de Software Livre - CIN/UFPE - Recife - PE 40 40
  • 42.
    PyCharm • IDE emPython customizada com suporte incluso ao Django • Excelente IDE para desenvolvimento WEB • 30 dias gratuito • http://www.jetbrains.com/pycharm/ II Workshop de Software Livre - CIN/UFPE - Recife - PE 41 41
  • 43.
    Outros Editores Notepad++, GEdit,VIM, Emacs, IDLE, Eric IDE, TextMate, etc. Vários editores ao seu dispor compatíveis com Python! II Workshop de Software Livre - CIN/UFPE - Recife - PE 42 42
  • 44.
    Seu shell incrementado... •IPython (Disponível para Linux, Mac, Windows) • http://ipython.scipy.org/ • BPython (Disponível para Linux e Mac OS) • http://bpython-interpreter.org/ • Incrementam o shell do seu interpretador Python com auto-complete, highlighting, etc. II Workshop de Software Livre - CIN/UFPE - Recife - PE 43 43
  • 45.
    Chega de conversa... •É hora de por a mão na massa! II Workshop de Software Livre - CIN/UFPE - Recife - PE 44 44
  • 46.
    Por onde começo? ... Criando nosso primeiro Hello World ! II Workshop de Software Livre - CIN/UFPE - Recife - PE 45 45
  • 47.
    ... em Python... print “Hello World” Exemplos1.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 46 46
  • 48.
    Tipos e operações Vamos ver um trecho de código em Python! II Workshop de Software Livre - CIN/UFPE - Recife - PE 47 47
  • 49.
    Código Base II Workshop de Software Livre - CIN/UFPE - Recife - PE 48 48
  • 50.
    ... entendendo ocódigo... • Atribuição utiliza = e comparação utiliza == II Workshop de Software Livre - CIN/UFPE - Recife - PE 49 49
  • 51.
    ... entendendo ocódigo... • Atribuição utiliza = e comparação utiliza == II Workshop de Software Livre - CIN/UFPE - Recife - PE 50 50
  • 52.
    ... entendendo ocódigo... • Números: + - * / % tem suas funções características • + pode ser usado como concatenação de Strings; • % pode ser usado para formatar Strings (assim como em C). II Workshop de Software Livre - CIN/UFPE - Recife - PE 51 51
  • 53.
    ... entendendo ocódigo... • Números: + - * / % tem suas funções características • + pode ser usado como concatenação de Strings; • % pode ser usado para formatar Strings (assim como em C). II Workshop de Software Livre - CIN/UFPE - Recife - PE 52 52
  • 54.
    ... entendendo ocódigo... • Operadores lógicos são palavras e não símbolos (||, &&) • and, or, not II Workshop de Software Livre - CIN/UFPE - Recife - PE 53 53
  • 55.
    ... entendendo ocódigo... • Operadores lógicos são palavras e não símbolos (||, &&) • and, or, not II Workshop de Software Livre - CIN/UFPE - Recife - PE 54 54
  • 56.
    ... entendendo ocódigo... • print é o comando básico para “impressão” na tela II Workshop de Software Livre - CIN/UFPE - Recife - PE 55 55
  • 57.
    ... entendendo ocódigo... • print é o comando básico para “impressão” na tela II Workshop de Software Livre - CIN/UFPE - Recife - PE 56 56
  • 58.
    ... entendendo ocódigo... • E se você quiser receber uma entrada diretamente do usuário ? • raw_input() - retorna uma string ! Exemplos1.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 57 57
  • 59.
    ... entendendo ocódigo... • A primeira atribuição em uma variável também é responsável por cria-lá. • Os tipos das variáveis não precisam ser informados; • Python descobre o tipo da variável por conta própria! II Workshop de Software Livre - CIN/UFPE - Recife - PE 58 58
  • 60.
    ... entendendo ocódigo... • A primeira atribuição em uma variável também é responsável por cria-lá. • Os tipos das variáveis não precisam ser informados; • Python descobre o tipo da variável por conta própria! II Workshop de Software Livre - CIN/UFPE - Recife - PE 59 59
  • 61.
    ! !"#$%&'&'"()**+,- ...Usando o Shell ! .#/#'&01)/'2$3&/4#56)"'7&4&'481&%&"')'#1/2091&"'%)' 94'&0:)1&'0#"1#');)791#/'&'7&4#$%&'<%2/=>'?0">@'A9%&' )4'.B1(&$'8'&0:)1&C ! DDD%2/+<"1/2$E'%)'1)"1)=- ! F19%&'"&0/)'"1/2$E"CD ! DDD ! .#/#'G2"9#*2H#/'#'%&794)$1#5I&'%)'94'?0:)1&'0#"1#' );)791#/'&'7&4#$%&'<()*J= ! DDD()*J+KLLL- ! FM&794)$1#5I&'%&'&0:)1&'N$1)2/&D ! DDD II Workshop de Software Livre - CIN/UFPE - Recife - PE 60 60
  • 62.
    ! !"#$%&'&'"()**+,- ...Usando o Shell ! .#/#'/)0)12/'&'3&4#$%&'#$1)/2&/'0&%)5") ! !"#/'#'")1#'0#/#'324# ! 62721#/'89: ! .#/#'$#;)7#/')$1/)'&"'3&4#$%&'<=')>)3?1#%&"'@#"1#' ?"#/'#"'")1#"'0#/#'324#')'0#/#'@#2>& ! .#/#'&@1)/'#<?%#'7)/#*')>)3?1#5")'&'3&4#$%&'A()*0+-B ! .#/#'"#2/'%&'()*0'AC?21B ! .#/#'&@1)/'#'*2"1#'%&"'4D%?*&"' A4&%?*)"B ! .#/#'2$1)//&40)/'#*7?4'3&4#$%&'A31/*'E'FB II Workshop de Software Livre - CIN/UFPE - Recife - PE 61 61
  • 63.
    Whitespace • Importante paraidentação e novas linhas • Use para quando for para uma próxima linha prematuramente. • Em Python não há { } !! Isso é para definição de dicionários (dict) • Blocos de código definidos por identação! Exemplos1.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 62 62
  • 64.
    Comentários • Comentários começamcom # • Convenção: Você pode definir uma “documentação” em string como primeira linha de qualquer nova função que você definir. • Muito importante para o desenvolvedor, crítico para o usuário! II Workshop de Software Livre - CIN/UFPE - Recife - PE 63 63
  • 65.
    ! !"#"$%&#'(%)$"*+&*%),- Conhecendo alinguagem... ! .)/"0)$"0&/%&*%),"+" ! 12&0,3- ! 444"*5*67 ! 444"*5*8%&(%&9 ! 444 ! :-#%&0&/%&*%),"+";*/<-*&2)(%&*$"(%= ! >&*?@)(&#*0@+"#*-*%),-;*@(&*@0"* A@/B<- ! 12&0,3- ! 444"*5*C)/%D*6=7*E*1FFGHHH ! 444"*5*)/%C6=7D II Workshop de Software Livre - CIN/UFPE - Recife - PE 64 64
  • 66.
    ! !"#$%&%'(") Conhecendoa linguagem... ! *+,-.,))/0-1"#$%&%'+,-1"-20.,) ! 3%4% ! 052-%-6-78 ! 9:2;,5 ! %-6-7 ! *+,-.,))/0-#,<%51,)-1"#$%&%204,)-=>?@40,)AB ! 3%4% ! C$D,-5-6-5"E-C$D,=B8 ! 9:2;,5 ! 5-6-C$D,=B II Workshop de Software Livre - CIN/UFPE - Recife - PE 65 65
  • 67.
    Tipos Básicos • Inteiros (padrão para números) • Divisão entre inteiros, resposta um inteiro! • Inteiros Longos • L ou l no final. (Convertido automaticamente com precisão de inteiros > 32 bits) • Floats (ponto flutuante) • 1.23, 3.4e-10 • Complexas • >> 2 + 3j Exemplos1.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 66 66
  • 68.
    Tipos Básicos • Representaçãonumérica • Representação de dígitos com/sem formatação de string • Divisão clássica / base • Uso dos operadores // e / • Operações em nível de bit • 1 << 2 , 1| 2 , 1&2 • Notações hexadecimal / octal • 2 , 0x10 , 0100 , oct(64), hex(255) , int(‘200’), int(‘0100’,8) , int(‘0x40’,16) • Operações válidas: +, *, >> , ** , pow, abs, round, etc. Exemplos1.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 67 67
  • 69.
    Tipos Básicos • Strings ! • “abc” ou ‘abc’ !"#$%&'&($)*"+",-.% "#$%&'& ()*&+,&$-(.(/01( /01 2.3$+&45. /061 ).3$+&$5&785"9 /:1 )"7$+&45. /:61 )"7$+&$5&785"9 !!!"#$%&!&'()*% /661 785"9&;$<=.>$&':+.?.+@3(7"A !"#$%&'()*$&+&)('#%,$-+.../ /B61 #7?.+.3>. /0:1 #7?.+.3>. /7%1 785"9#"#.&#.&$<=.>$% /7%&3$>1 #7?.+.3,"&#.&$<=.>$% Exemplo1.py !!!+,(-.#/&0&+1()2%3444/ '()*% II Workshop de Software Livre - CIN/UFPE - Recife - PE 68 68
  • 70.
    Comandos básicos ! !"#$%&'()$*"+),-$.*/0&/%($. • Alguns comandos básicos que podem ajudar no ínicio! • dir(element) - todos ! 1$"'()$*"#$%&' os atributos e métodos que estão associados a elemento. ! 20/3,&'*&,)$*4,/*/.&56/%*/"*#%5"/5%$* • 7-$3$*($*"+),-$ type(element) - Descobrir o tipo do objeto! • import - importe módulos para uso no seu código! ! 8$%('*65.96/-*$7:/&$.*/*./,.*%/.#/3&56$.* ";&$)$. !"#$%& !"#$%&# !"#$%& !"#$%&#'(&)# !"#$%& !"#$%&#'(&)#!'(!"(&) ) !"#$%&#!!"#$%& !* ) !"#$%&#!!"#$%& !(&)# ) !"#$%&#!!"#$%& !(&)#'+,-"!'(!(+, II Workshop de Software Livre - CIN/UFPE - Recife - PE 69 69
  • 71.
    Exercício 01 • Façaum programa que peça 2 números e um real. • Calcule e mostre: • O produto do dobro do primeiro com a metade do segundo • A soma do triplo do primeiro com o terceiro • O terceiro elevado ao cubo II Workshop de Software Livre - CIN/UFPE - Recife - PE 70 70
  • 72.
    Atribuição ...Vamos entender como funciona atribuição! II Workshop de Software Livre - CIN/UFPE - Recife - PE 71 71
  • 73.
    Atribuição • Atribuição de uma variável em Python significa criar um rótulo para armazenar uma referência para algum objeto. • Atribuição cria referências e não cópias! • Inferência do tipo da referência baseado no tipo de dado atribuído • A referência é deletada por meio de Garbage Collection • Quando o objeto deixa de ser referenciado por nenhum outro rótulo(variável). II Workshop de Software Livre - CIN/UFPE - Recife - PE 72 72
  • 74.
    Atribuição • Lembre-se que Python a tipagem é dinâmica! • Declarar variáveis sem atribuí-las irá levantar um erro! II Workshop de Software Livre - CIN/UFPE - Recife - PE 73 73
  • 75.
    Atribuição • Você pode inicializar várias variáveis de uma só vez! • x = y = z = 2.0 • Rótulos de variáveis são Case Sensitive e não podem iniciar com número. Números, letras e underscores são permitidos! • bob bob_2 _bob _2_bob bob_2 BoB • Não esquecer das palavras reservadas! II Workshop de Software Livre - CIN/UFPE - Recife - PE 74 74
  • 76.
    Atribuição • Entendendo manipulação de atribuição de referências • x = y não significa que você fez uma cópia de y! • x = y o que realmente faz é x referencia ao objeto que y referencia! • O que realmente acontece por trás dessa simples atribuição: II Workshop de Software Livre - CIN/UFPE - Recife - PE 75 75
  • 77.
    Atribuição • Mas e se fizermos isso ?! Qual será o valor de x ? >>> x = “casa” >>> y = x >>> x = “fazenda” >>> print x II Workshop de Software Livre - CIN/UFPE - Recife - PE 76 76
  • 78.
    Atribuição • Mas e se fizermos isso ?! Qual será o valor de x ? >>> x = “casa” >>> y = x >>> y = “fazenda” >>> print x • Do mesmo jeito que nós esperávamos! Dados nativos são imutáveis! (String, Inteiros, float, complexos). >>> x = “casa” #cria 3, x referencia ao objeto string “casa” >>> y = x # Cria variavel y, referencia ao objeto string “casa” >>> y = “fazenda” #Cria referencia ao objeto string “fazenda” >>> print x # Nenhum efeito em x, ainda referencia “casa” >>> casa II Workshop de Software Livre - CIN/UFPE - Recife - PE 77 77
  • 79.
    Listas, Strings eTuplas ... O poder de python agora! II Workshop de Software Livre - CIN/UFPE - Recife - PE 78 78
  • 80.
    Listas, Strings eTuplas • Todos os três são Sequências! • Podem ser indexados por algum valor ordinal posicional • Todas as operações apresentadas aqui nesta seção podem ser aplicadas em todos os tipos de sequência • Listas • li = [1,2,3, ‘abc’] • Tuplas • li = (23, ‘abc’, 4.56, (2,3), ‘def’) • Strings • st = “Hello World” st = ‘Hello World’ Exemplos2.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 79 79
  • 81.
    Listas, Strings eTuplas • Manipulando sequências! • Pelo índice a partir de 0 Ex: ti [0] • Índices podem ser positivos ou negativos! Ex: ti[1] (esq.) ti[-4] (dir.) • Fracionamento e matrizes! • li[1:3] L[1:] matrix = [[1,3,4] , [3,5,6] , [7,8,9]] • Operador in • retorna um booleano. Checa se um valor está em uma sequência! • 4 in li Exemplos2.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 80 80
  • 82.
    ! Listas, Strings eTuplas !"#$%#&'&%()##%*+,&"$)*# ! -*+"()&.,#"$"/,#&)&*)0%$"/,# !!!"#$#%&'(')'*'+,#!"#$%&'()*%)+$,-% !!!"%-, & !!!"%(, ) !!!"%.&, + !!!"%.), ) !!!"%&/, %(')'*'+, !!!"%/), %&'('), !!!"%&/*/(,#!%"#.,"$*()()/%,,(0)"(+.-%1,.)/2+%3*()*.)4).5)4 %('*, !!!"%//.&, %+'*')'('&,#!/%,,()3.6%-$7()$37.#-.)%),.8293"$% Exemplos2 II Workshop de Software Livre - CIN/UFPE - Recife - PE 81 81
  • 83.
    Operacões em Listas • Operador + , * • a = “Hello” + “ World” (concatenação) • [3] * 4 (repetição) • Operador len() e append() • len() - retorna um inteiro com o tamanho da sequência! • append() - adiciona um elemento ao final da lista! • Atribuição • list[0] = ‘3’ • Fazendo cópias de sequência , Cuidado!!! Exemplos2.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 82 82
  • 84.
    Operacões em Listas • Qual será o valor de b ? >>> a = [1,2,3] >>> b = a >>> a.append(4) >>> print b II Workshop de Software Livre - CIN/UFPE - Recife - PE 83 83
  • 85.
    Operacões em Listas • Qual será o valor de b ? >>> a = [1,2,3] >>> b = a >>> a.append(4) >>> print b • Surpresa! >>> b = [1,2,3,4] • Dados do tipo listas, dicionarios e pré-definidos pelo usuário são mutáveis! II Workshop de Software Livre - CIN/UFPE - Recife - PE 84 84
  • 86.
    Operacões em Listas II Workshop de Software Livre - CIN/UFPE - Recife - PE 85 85
  • 87.
    Operacões em Listas • Para fazer cópias de listas • a = b[:] (2 cópias independentes) • a = b (os 2 referenciam o mesmo objeto) • Qual a diferença entre listas e tuplas ? • Listas são mutáveis e Tuplas imutáveis! • l = [1,‘abc’,4] t = (1,‘abc’,4,5) • Atribuição em listas e tuplas • list[0] = ‘3‘ ok! • t[0] = 3 NOK!!! (Deve-se criar uma nova tupla! - t = (3, ‘abc’,4,5) Exemplos2.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 86 86
  • 88.
    Tuplas x Listas ! • Listas !"#$%& são mais lentas porém mais poderosas que tuplas • Listas podem ser modificadas e tem diversos operadores que podem ser utilizados ! '(%)*+%,-.)-/*0"%*&/%/$*&)%&1/+2,/",%/3*4-(-.5%/&")*$1/ • Tuplas são imutáveis e tem menos funcionalidades! &62/*,")78-*& ! /9&%:&-/%/4".562/)"#$-;</#%(%/)(%.&42(,%(/2")(2&/)*#2&/ • -,/)"#$%& converter entre listas e tuplas ? Para !!!"#$#%&'(')'*'+, !!!-./012"3 2&'(')'*'+3 !!!045-2-./012"33 %&'(')'*'+, !!!610/2-./013#!"#$%&%'#"()) Exemplos2.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 87 87
  • 89.
    ! Exercício 02 !"#$%&%'()*+* ! ,(-.$#/0#)1-)-#23'4.#)5'-.1-6)7#$'8171-)7#9 ! :;6*6<6=6>6?6@6A6B6C6*;6**6*<6*=6*>6*?D ! E4.#$815()7#)*)1)C ! E4.#$815()7#)B)1)*= ! FG0#$(-)H1$#- ! FG0#$(-)&0H1$#- ! I(7(-)(-)0G5.'H5(-)7#)<6)=)#)> ! J'-.1)$#8#$-1 ! K1LM()#4.$#)1)-(01)7()'4.#$815()7#)*;)1)*?)H#5() '4.#$815()7#)=)1)C)#0)N5(1.O II Workshop de Software Livre - CIN/UFPE - Recife - PE 88 88
  • 90.
    Métodos muito usados • append(), insert(), extend(), del() • min(), max() • index(), count(), remove(), pop() • reverse() , sort() • etc. Exemplos2.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 89 89
  • 91.
    Strings • Formatação e conversão de Strings • Usam os mesmos operadores básicos de lista • Multi-Strings, Strings com aspas simples e duplas • Caracteres Speciais e str() e unicode() Exemplos2.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 90 90
  • 92.
    Strings • Também uma sequência e é Imutável! • “42” + 1 (erro!) Use “42” + str(1) • float(), int() -> string para numéro • Atribuição • S = ‘spam’ S[0] = ‘x’ ERRO!!! • Strings são imutáveis! • String -> Lista -> String (.join) • Formatação de string Exemplos2.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 91 91
  • 93.
    Métodos mais usados • find(), replace(), join(), split() • isdigit(), islower(), strip(), • startswith(), upper(), lower() • etc. Exemplos2.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 92 92
  • 94.
    Exercício 03 • Crie uma lista com o nome de 10 pessoas e sorteie uma pessoa, depois embaralhe novamente e sorteie outra (sem repetição) • Dica: help(random) - módulo para aleatoriedade. • Faça um programa que permita ao usuário digitar o nome e em seguida mostrar ao usuário de trás pra frente somente em letras maiúsculas. • Dica: Procure pela documentação do help(“”) ! II Workshop de Software Livre - CIN/UFPE - Recife - PE 93 93
  • 95.
    Dicionários Um “hash map” pythonico! II Workshop de Software Livre - CIN/UFPE - Recife - PE 94 94
  • 96.
    Dicionários • Estrutura de dados em forma de coleções onde os items são armazenados e buscados pela chave em vez do deslocamento posicional. • Chaves podem ser quaisquer objetos do tipo imutável • Valores podem ser de qualquer tipo • Um dicionário pode armazenar diferentes tipos de valores e é mutável! • Criando e modificando dicionários! • d = {“user” : “Marcel” , “password”: 2342} Exemplos3.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 95 95
  • 97.
    Dicionários • Dicionários não são ordenados! • Uma nova chave pode aparecer em qualquerr lugar • Funciona como “hashing” • Algums métodos: • has_key(‘eggs’) , clear() , del d[‘key’] , keys(), values(), items(), get() , update() • copy() fazer cópias de dicionários ! (Lembre-se que dicionario é mutável!) Exemplos3.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 96 96
  • 98.
    Arquivos Como éfácil manipular um arquivo! II Workshop de Software Livre - CIN/UFPE - Recife - PE 97 97
  • 99.
    Arquivos • Apenas uma linha para abrir um arquivo! • file = open(“data”, ‘r’) tipos: r, a, w • Alguns métodos para operações em arquivos: • file.read(), readline(), readlines(), • file.write(), writelines(), • file.close() Exemplos3.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 98 98
  • 100.
    Booleanos Expressões lógicas II Workshop de Software Livre - CIN/UFPE - Recife - PE 99 99
  • 101.
    Expressões lógicas • True e False são constantes em Python • False : 0, None, [] , {} , 0.0 • True: Valores Numéricos exceto 0, objeto não vazios • Um dicionário pode armazenar diferentes tipos de valores e é mutável! • Operadores de comparação: ==, != , < , <=, etc. • X == Y ( efetua teste de equivalência de valor) • X is Y (Testa a identidade do objeto) Exemplos3.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 100 100
  • 102.
    Expressões lógicas • None é similar ao NULL em linguagem C • L = [None] * 100 (declara uma lista de 100 items None ) • Operações com or e and • not -> inversão lógica (true -> false , false -> true) • and e or (&& e II) • isinstance(element,type) • Verifica se um elemento é do tipo type Exemplos3 II Workshop de Software Livre - CIN/UFPE - Recife - PE 101 101
  • 103.
    Exercício 03 II Workshop de Software Livre - CIN/UFPE - Recife - PE 102 102
  • 104.
    Exercício 04 II Workshop de Software Livre - CIN/UFPE - Recife - PE 103 103
  • 105.
    Instruções compostas If python == “cool”: print “Oh yeah!” II Workshop de Software Livre - CIN/UFPE - Recife - PE 104 104
  • 106.
    Fluxo de Controle • Várias expressões Python para controlar o fluxo do programa. Todos eles fazem uso de testes condicionais booleanos. • ifs, else • loops while, for II Workshop de Software Livre - CIN/UFPE - Recife - PE 105 105
  • 107.
    Instruções if Exemplos4 II Workshop de Software Livre - CIN/UFPE - Recife - PE 106 106
  • 108.
    Instruções while Exemplos4 II Workshop de Software Livre - CIN/UFPE - Recife - PE 107 107
  • 109.
    Instruções while • Você pode usar o comando break para sair do loop mais próximo que a envolve. • Você pode usar o comando continue para pular para o ínicio do loop mais próximo que a envolve e pular para a próxima iteração. • Você pode usar o comando pass quando você não quer que se faça nada (instrução vazia) • Você pode o o bloco else do loop para quando se quer executar um código quando se sai normalmente do loop (sem ser por comando break) Exemplos4.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 108 108
  • 110.
    Instruções for • Loops for iteram sobre uma sequência de items (listas, tuplas, string ou quaisquer outros objetos cuja a linguagem considere como um “iterator”) • Várias maneiras de iterar sobre um conjunto de items! • Também possui o bloco else quando se sai normalmente do loop (similar ao while) • Função muito usada nos loops for: range() • range() - Retorna uma lista de números que varia de 0 a ao número passado como parâmetro. Exemplos4.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 109 109
  • 111.
    Instruções for II Workshop de Software Livre - CIN/UFPE - Recife - PE 110 110
  • 112.
    Instrução zip • A função range() percorre sequências de maneira exaustiva. A função interna zip permite usar loops for para visitar várias sequências em paralelo. • zip() é bastante poderoso, pode unir sequências onde retorna ! uma lista de tuplas que se distribuem em pares os items paralelos extraídos dessas sequências. • Permite também facilitar a construção de dícionarios! ! • x = dict(zip(kes,vals)) ! ! ! ! ! ! Exemplos4.py ! II Workshop de Software Livre - CIN/UFPE - Recife - PE 111 111
  • 113.
    Compreensão de listas [i for i in “python é fácil demais”] II Workshop de Software Livre - CIN/UFPE - Recife - PE 112 112
  • 114.
    Compreensão de listas ! !"#$%&&'()"*+&*,-(./( linguagem Python • Funcionalidade muito poderosa da • 01.2"'*(3$"%./*4"#$%&(()"*+&*,-(./(5*4%-/*,-(./(*+&*6"%#/* da lista original. Gera uma lista nova aplicando uma função para cada elemento • 674-,*&*%7$-+/8*9*3("*+&*4"#$%&(()"*+&*,-(./(*:*;&#* de código!) ! Muito usado por programadores Python! (Economia 4"#3#*&#*#/.&#7.-4/8 • A !sintaxe da compreensão de lista usa-se de palavra-chaves: 0"%*&<&#$," ! =*>*?<@*A*<*-'*?B*888*CDD • [expression for name in list] ! E*>*?<*F*<*-'*=*/'+*<*&G&'D ! H#*$1.2"'*.&#"( ! III(*>*J<KKL*6"%*<*-'*%/'M&NOBPQ ! III#*>*J<*6"%*<*-'*(*-6*<RL*>>*BQ Exemplos4.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 113 113
  • 115.
    Compreensão de listas • Permite também o uso de filtros (deteminam se uma determina expressão deve ser executada sobre um membro da ! lista) !"#$%&&'()"*+&*,-(./(012 ! • [expression for name in list if filter ] 3.-,-4/%*+-5-"'6%-"(7*&8&#$,"9 ! :::+;<=>",?=9@AAAA7=5&,./=9BCAAA7=D-,E8=9FGAAA7 =?E(5/=91AAAH ! :::$"((-I-,-+/+&(J%-5"*;*K5/%*?"%*5/%*-'*+*-?*+K5/%L* M*NAAAAL ! :::$"((-I-,-+/+&(J$"I%&*;*K5/%*?"%*5/%*-'*+*-?* +K5/%L*M*1AAL Exemplos4.py ! O#*(.%-'>( II Workshop de Software Livre - CIN/UFPE - Recife - PE ! :::*'"#&*;*=P'P'*QQ*OQP'QQ(Q.QP'P'QP'/* 114 ?Q%P'P'/QQQ(P'&*P.-QQ'RQQ/Q*Q(QQEP'QSP'&QQP 'P'Q-P'%QQ/QT***P'QQ*P'P'P'P'= 114
  • 116.
    Exercício 05 • Faça ! um programa que imprima na tela apenas os números ímpares entre 1 e 50 (usando compreensão de !"#$%&%'()*+* listas!) ! ,#-.()/01)2'341)5#)-(0#3)5#)%2133#3)(3)6/1'3)#347() #3%$'4(3)-()#34'2()/-5#$2'-#)89-(0#:(/4$(:-(0#;<)#) 1=($1)0/5(/>3#)()?15$7()?1$1)@10#2@13#+)A#5#>3#)/0) 2'341)%(0)(3)-(0#3)4(5(3)#0)@10#2@13#+ ! BBB2'341:-(0#:%2133#3CD94#21:?$'-%'?12;E;01?1:5 #:5'3?(3'4'F(3;E;%2133#:-#=(%'(:?#315(;E;1%/0/21 5($;E;G'0:51:2'341:5#):5#:%2133#3:5(:#"#$%'%'(;H ! I'%1J ! K3#)13)G/-LM#3)34$+4'42#)#)34$+3?2'4 II Workshop de Software Livre - CIN/UFPE - Recife - PE ! N#?(341O 115 ! $#3?(341)C)DPP+Q('-8DR+4'42#8<)G($)R)'-)SH<)G($)S)'-) 115
  • 117.
    Funções ...Seu programa tendocara de programa! II Workshop de Software Livre - CIN/UFPE - Recife - PE 116 116
  • 118.
    Definindo Funções Definição dafunção inicia com “def ” II Workshop de Software Livre - CIN/UFPE - Recife - PE 117 117
  • 119.
    Definindo Funções Definição dafunção inicia com “def ” Nome da função II Workshop de Software Livre - CIN/UFPE - Recife - PE 118 118
  • 120.
    Definindo Funções Definição dafunção inicia com “def ” Nome da função Argumentos II Workshop de Software Livre - CIN/UFPE - Recife - PE 119 119
  • 121.
    Definindo Funções Definição dafunção inicia com “def ” Nome da função Argumentos Identação II Workshop de Software Livre - CIN/UFPE - Recife - PE 120 120
  • 122.
    Definindo Funções Definição dafunção inicia com “def ” Nome da função Argumentos Identação “return” indica o retorno da função II Workshop de Software Livre - CIN/UFPE - Recife - PE 121 121
  • 123.
    Definindo Funções Definição dafunção inicia com “def ” Nome da função Argumentos Identação “return” indica o retorno da função Sem header file Sem declaração do tipo de retorno da função ou do tipo dos argumentos II Workshop de Software Livre - CIN/UFPE - Recife - PE 122 122
  • 124.
    Chamando uma função • Sintaxe básica para chamar uma função: >>> def myfun(x, y): return x * y >>> myfun(3, 4) 12 Exemplos5.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 123 123
  • 125.
    Passagem de parâmetros • Várias métricas podem ser usadas na passagem dos parâmetros de uma função: >>> def myfun(x, y): return x * y >>> myfun(3, 4) 12 >>> myfun(y=3, x=4) 12 >>> myfun(3, y=4) 12 Exemplos5.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 124 124
  • 126.
    Parâmetros com valorespadrões • Cada parâmetro pode ter um valor padrão. • Utilizado quando um parâmetro é omitido na chamada da função def myfun(x, y = 0.3, prompt = True): res = x * y if prompt: print “Resposta é %f”, res return res Exemplos5.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 125 125
  • 127.
    Parâmetros com valorespadrões def myfun(x, y = 4, prompt = True): res = x * y if prompt: print “Resposta é %i”, res return res • Esta função pode ser invocada de várias formas: >>> myfun(3) Resposta é 12 12 >>> myfun(x=3, prompt = False) 12 >>> myfun(5, 2, False) 10 Exemplos5.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 126 126
  • 128.
    Valor de retorno • Toda função em Python retorna alguma valor; • Mesmo funções que não possuem a cláusula return. • Funções que não possuem return retornam None. • None é uma constante especial definida na linguagem; • Similar a NULL, void, ou nil em outras linaguagens; • É lógicamente equivalente à False; • O interpretador não imprime None. II Workshop de Software Livre - CIN/UFPE - Recife - PE 127 127
  • 129.
    Valor de retorno • Uma função pode retornar mais de um valor >>> def teste(): x = 1 y = 2 z = 3 return x, y, z >>> x, y, z = teste() >>> ret = teste() >>> ret (1, 2, 3) Exemplos5.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 128 128
  • 130.
    Algumas funções especiais ...e Python também tem seu momento funcional! II Workshop de Software Livre - CIN/UFPE - Recife - PE 129 129
  • 131.
    Parâmetros args Exemplos5.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 130 130
  • 132.
    Funções map, reducee filter • Função map(func, seq) • Função interna que aplica uma função func a cada item de um objeto sequência (seq) e retorna uma lista com os resultados da chamada da função. • Função filter(func, seq) • Função interna que aplica uma função filtro func a cada item de um objeto sequência (seq) e retorna uma lista com os resultados que satisfazem os critérios da função de teste seq. Exemplos5.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 131 131
  • 133.
    Módulos ... Módulos: oque é, como criar e como utilizar. II Workshop de Software Livre - CIN/UFPE - Recife - PE 132 132
  • 134.
    Introdução 1/2 • Quando você encerra o interpretador, todas as definições de variáveis e funções são perdidas; • Solução é gerar um script e roda-lo. • Mas e se você desejar utilizar um determinada função do script em outro programa? • Solução são os módulos! II Workshop de Software Livre - CIN/UFPE - Recife - PE 133 133
  • 135.
    Introdução 2/2 • Um módulo é um arquivo .py contendo definições e comandos Python: • Funções • Variáveis e constantes • Classes • ... • Vantagem é a possibilidade de adicionar todas estas definições em outros arquivos ou módulos. • Isto é feito utilizando a cláusula import II Workshop de Software Livre - CIN/UFPE - Recife - PE 134 134
  • 136.
    Executando módulos comoscripts • Rodar um módulo Python é similar a importar as definições do módulo para o interpretador. • Se você fizer python meuModulo.py irá carregar as definições e destruir logo em seguida! • Para executar algum determinado código de maneira similar à um script você deve testar a cláusula __name__ : if __name__ == “__main__”: print “Execute algum código” Exemplos5.py II Workshop de Software Livre - CIN/UFPE - Recife - PE 135 135
  • 137.
    Pacotes • Pacotes são coleções de módulos Python. • Qualquer diretório do sistema operacional que contém um arquivo __init__.py dentro é considerado um pacote. • Pacotes organizam módulos e permitem que programadores importem módulos da seguinte maneira: • import meuPacote.meuSubPacote.meuModulo # meuPacote/ # __init__.py -- vazio # meuSubPacote/ # __init__.py -- vazio # meuModulo.py -- modulo importado II Workshop de Software Livre - CIN/UFPE - Recife - PE 136 136
  • 138.
    Caminho de buscados módulos • Quando você executa import meuModulo o interpretador procura pelo arquivo meuModulo.py seguindo uma determinada regra. • Primeiramente ele procura pelo arquivo no diretório corrente (onde o interpretador foi executado). • Caso ele não encontre o arquivo no diretório corrente, a busca prossegue em uma lista de diretórios que é especificada na variável sys.path • Você pode atribuir novos diretórios de busca na variável sys.path (ela é uma lista dentro do módulo sys da biblioteca padrão) • Útil quando você quer instalar seu módulo na máquina de um usuário. II Workshop de Software Livre - CIN/UFPE - Recife - PE 137 137
  • 139.
    Compilando um móduloPython ... Compilando??? Como assim??? Python não é interpretado??? II Workshop de Software Livre - CIN/UFPE - Recife - PE 138 138
  • 140.
    Compilando um móduloPython • Sim, Python é e continua sendo interpretada! • Python utiliza o conceito de byte-code (muito conhecido em Java). • O que acontece quando você importa um módulo: • 1) - Interpretador busca pelo arquivo .py correspondente; • 2) - Arquivo .py é “compilado” para o byte-code reconhecido pelo interpretador; • 3) - Byte-Code é incorporado a tabela de símbolos correntes do interpretador. II Workshop de Software Livre - CIN/UFPE - Recife - PE 139 139
  • 141.
    Compilando um móduloPython • Compilação para byte-code pode ser um gargalo de desempenho quando você carregar um programa! • Especialmente se você utiliza muitos módulos em seu programa. • Solução é pré-compilar os módulos antes de rodar seu programa! II Workshop de Software Livre - CIN/UFPE - Recife - PE 140 140
  • 142.
    Exercício 06 • II Workshop de Software Livre - CIN/UFPE - Recife - PE 141 141
  • 143.
    QuickSort • Algoritmo de ordenação bastante utilizado e muito eficiente • Complexidade BigO(nlogn) 1 . Escolher um pivô inicial x; 2. Colocar todos itens com chave menor que a de x à esquerda de x, formando uma seqüência S1; 3. Colocar todos itens com chave maior que a de x à direita de x, formando uma seqüência S2; 4. Isto feito, o mesmo processo é aplicado às seqüências S1 e S2, que por sua vez produzirão novos segmentos; 5. O processo deve ser aplicado sucessivamente às seqüências enquanto elas tiverem tamanho ≥ 1; II Workshop de Software Livre - CIN/UFPE - Recife - PE 142 142
  • 144.
    QuickSort • Você pensaria assim... def partition(list, l, e, g): if list == []: return (l, e, g) else: head = list[0] if head < e[0]: return partition(list[1:], l + [head], e, g) elif head > e[0]: return partition(list[1:], l, e, g + [head]) else: return partition(list[1:], l, e + [head], g) II Workshop de Software Livre - CIN/UFPE - Recife - PE 143 143
  • 145.
    QuickSort • Agora que você sabe compreensão de listas, você pode fazer assim! def qsort(L): if len(L) <= 1: return L return qsort( [ lt for lt in L[1:] if lt < L[0] ] ) + [ L[0] ] + qsort( [ ge for ge in L[1:] if ge >= L[0] ] ) • E não é que lembra a linguagem funcional Haskel ?! # qsort [] = [] # qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x # where # elts_lt_x = [y | y <- xs, y < x] # elts_greq_x = [y | y <- xs, y >= x] II Workshop de Software Livre - CIN/UFPE - Recife - PE 144 144
  • 146.
    Ordenação • Mas um programador Pythonico, ainda faria mais eficiente! list.sort() • Utiliza-se de uma implementação nativa de Python para ordenação de sequências! Mais eficiente, híbrido com complexidade no pior caso de nlogn. II Workshop de Software Livre - CIN/UFPE - Recife - PE 145 145
  • 147.
    Python é muitopoderoso! • Não precisa reinventar a roda! Molde-a para adaptar ao seu problema! • A documentação de Python é bastante vasta e há muitas funcionalidades prontas! II Workshop de Software Livre - CIN/UFPE - Recife - PE 146 146
  • 148.
    Chegamos ao fim!=D Hora da random.choice([pergunta, dúvida, discussão]) !! II Workshop de Software Livre - CIN/UFPE - Recife - PE 147 147
  • 149.
    Referências • I Workshop CINLUG de Python (Ministrado no CIN) • http://www.cin.ufpe.br/~cinlug/files/workshop-python.1.pdf • http://www.cin.ufpe.br/~cinlug/files/workshop-python.2.pdf • Mini-Curso de Introdução a Python (Avaty Tecnologia e Info.) • http://www.avaty.com.br/artigos/CURSO-PYTHON.pdf II Workshop de Software Livre - CIN/UFPE - Recife - PE 148 148
  • 150.
    Hello, I amPython! Marcel Caraciolo Mini-Curso De Introdução a Python II Workshop de Software Livre - CIN/UFPE - Recife - PE 149 149