A linguagem Python
 Simplicidade multiparadigma
Quem sou eu?


   Ygor Mutti (aka Mamutti)
   Técnico em desenvolvimento de software
   Aluno de Ciências da Computação na UFBA
   Estudo tecnologias livres
   Blog
       http://icaju.com
   Contato:
       ygor@icaju.com
       @Mamutti
Introdução


   Guido Van Rossum, o BDFL
   Monty Python's Flying Circus
   import this
   Interpretada (bytecode)
       Modo interativo
   Tipagem dinâmica e forte
   Plataformas
       Web
       Desktop
       Mobile
Introdução


   Batteries included
   PYPI
   Tudo é objeto
   Multiparadigma
       Procedural
       Funcional
   Sintaxe clara e concisa
       Auto-documentada
       Intermezzo
Sintaxe


   Chaves? Pra quê?
       Mesma indentação = mesmo bloco
       Mantenha o padrão!
   Comentários
       Docstrings: ''' ''' ou ””” ”””
                   Pydoc
                   help()
       Linha: #
                   #!/usr/bin/python
                   # -*- coding: utf-8 -*-
   Case sensitive
Hello World! - Exercício


   Objetivos (K&R)
        Criar o código em algum lugar
        Executá-lo
        Ver para onde sua resposta foi
   Código:

    print 'Hello World!'
Controle de fluxo


   if
    if condicao:
        bloco_de_codigo
    elif condicao:
        bloco_de_codigo
    elif condicao:
        bloco_de_codigo
    else:
        bloco_de_codigo


    if condicao: comando


    variavel = valor1 if condicao else valor2
Controle de fluxo


   break
   continue
   while
    while condicao:
        bloco_de_codigo
        continue
        break
    else:
        bloco_de_codigo
Controle de fluxo


   for
    for referencia in sequencia:
        bloco_de_codigo
        continue
        break
    else:
        bloco_de_codigo

    # Para o for à moda antiga usamos range(), que gera uma
    # sequência

    for referencia in range(inicio, fim, passo)
        bloco_de_codigo
        continue
        break
    else:
        bloco_de_codigo
Operadores


   Atribuição: =
       a, b = b, a
   Lógicos (curto-circuito)
       and
       or
       not
   Identidade:
       (not) is
   Pertencimento
       (not) in
Operadores


   Igualdade
       ==
       != ou <>
   Comparação
       <
       >
       <=
       >=
       X<Y<Z
Operadores


   Genéricos
       +
       -
       *
       **
       /
       //
       %
       Suplementados
Operadores

   Slices
Fibonacci – Exercício


   Imprima os 10 primeiros termos da série
   Use conceitos novos vistos em Python
   Quanto mais simples, melhor
   Compare o tamanho e a legibilidade do código
    com outras linguagens
Resposta




      a, b = 0, 1
      for i in range(10):
          print b
          a, b = b, a + b
Primos – Exercício


   Imprima os números primos no intervalo
    fechado de 2 a 20
   Se o número não for primo, mostre quais
    números podem ser multiplicados para obtê-lo
   Dica: use o else e o break do laço for
Resposta




for n in range(2, 21):
    for div in range(2, n):
        if n % div == 0:
            print n, ' = ', n / div, ' * ', div
            break
    else:
        print n, 'é primo.'
Tipos embutidos


   Numéricos (int, long, float, complex)
   Strings (str, unicode)
   Coleções (list, tuple, dict, set, frozenset)
   Lógicos (bool, int, None, vazio, cheio)
   Nulo (NoneType)
   Arquivos (file)
   Observação
       Tipos mutáveis: passagem por referência
       Tipos imutáveis: passagem por valor
Funções


   def

# Declarando
def funcao():
    '''Aqui descrevemos o que a função faz.'''
    pass
    return valor # opcional

# Chamando
funcao()
Funções


   Parâmetros
       Não existe sobrecarga de assinaturas
       Tipos de parâmetros:
                    Simples (obrigatórios)
                    Com valor default (opcionais)
                    Lista de argumentos
                    Dicionario de argumentos
   Namespace próprio
       Ofusca variáveis globais
       Global
   Funções embutidas
Fatorial – Exercício


   Crie uma função fat recursiva que calcule o
    fatorial de um inteiro
   Documente-a usando uma docstring
   Execute help(fat) e observe o resultado
Resposta




def fat(inteiro):
    '''Retorna o fatorial de um número inteiro.”
    if inteiro == 1:
        return 1
    else:
        return inteiro * fat(inteiro - 1)
Documentação


   Baseada nos docstrings
   help()
   PyDoc
       pydoc modulo.py
       pydoc -p 8000
       pydoc -g
   Manual de referência
Módulos


   import, from, as, *
# Usos mais comuns
import modulo_ou_pacote
import pacote.modulo

# Importando um módulo específico dentro de um
pacote
from pacote import modulo

# Importando tudo (__all__) do pacote para o
namespace atual
from pacote import *

# Alias de importações
import modulo_ou_pacote as alias
from pacote import modulo as alias
Pacotes


   Pastas com módulos
   Facilitam a organização
   __init__.py
       Pode ser um arquivo vazio
       Pode conter código de inicialização
       Define quais módulos são importados com *
Biblioteca padrão


   Mais tipos (decimal, csv, datetime)
   Extensão dos tipos embutidos (string)
   Funções do interpretador (sys)
   Acesso ao sistema operacional (os)
   Expressões regulares (re)
   Persistência (anydbm, pickle, sqlite3, API)
   GUI (TkInter)
   Threads (thread, threading, etc)
   E muito mais!

Minicurso Python

  • 1.
    A linguagem Python Simplicidade multiparadigma
  • 2.
    Quem sou eu?  Ygor Mutti (aka Mamutti)  Técnico em desenvolvimento de software  Aluno de Ciências da Computação na UFBA  Estudo tecnologias livres  Blog  http://icaju.com  Contato:  ygor@icaju.com  @Mamutti
  • 3.
    Introdução  Guido Van Rossum, o BDFL  Monty Python's Flying Circus  import this  Interpretada (bytecode)  Modo interativo  Tipagem dinâmica e forte  Plataformas  Web  Desktop  Mobile
  • 4.
    Introdução  Batteries included  PYPI  Tudo é objeto  Multiparadigma  Procedural  Funcional  Sintaxe clara e concisa  Auto-documentada  Intermezzo
  • 5.
    Sintaxe  Chaves? Pra quê?  Mesma indentação = mesmo bloco  Mantenha o padrão!  Comentários  Docstrings: ''' ''' ou ””” ”””  Pydoc  help()  Linha: #  #!/usr/bin/python  # -*- coding: utf-8 -*-  Case sensitive
  • 6.
    Hello World! -Exercício  Objetivos (K&R)  Criar o código em algum lugar  Executá-lo  Ver para onde sua resposta foi  Código: print 'Hello World!'
  • 7.
    Controle de fluxo  if if condicao: bloco_de_codigo elif condicao: bloco_de_codigo elif condicao: bloco_de_codigo else: bloco_de_codigo if condicao: comando variavel = valor1 if condicao else valor2
  • 8.
    Controle de fluxo  break  continue  while while condicao: bloco_de_codigo continue break else: bloco_de_codigo
  • 9.
    Controle de fluxo  for for referencia in sequencia: bloco_de_codigo continue break else: bloco_de_codigo # Para o for à moda antiga usamos range(), que gera uma # sequência for referencia in range(inicio, fim, passo) bloco_de_codigo continue break else: bloco_de_codigo
  • 10.
    Operadores  Atribuição: =  a, b = b, a  Lógicos (curto-circuito)  and  or  not  Identidade:  (not) is  Pertencimento  (not) in
  • 11.
    Operadores  Igualdade  ==  != ou <>  Comparação  <  >  <=  >=  X<Y<Z
  • 12.
    Operadores  Genéricos  +  -  *  **  /  //  %  Suplementados
  • 13.
  • 14.
    Fibonacci – Exercício  Imprima os 10 primeiros termos da série  Use conceitos novos vistos em Python  Quanto mais simples, melhor  Compare o tamanho e a legibilidade do código com outras linguagens
  • 15.
    Resposta a, b = 0, 1 for i in range(10): print b a, b = b, a + b
  • 16.
    Primos – Exercício  Imprima os números primos no intervalo fechado de 2 a 20  Se o número não for primo, mostre quais números podem ser multiplicados para obtê-lo  Dica: use o else e o break do laço for
  • 17.
    Resposta for n inrange(2, 21): for div in range(2, n): if n % div == 0: print n, ' = ', n / div, ' * ', div break else: print n, 'é primo.'
  • 18.
    Tipos embutidos  Numéricos (int, long, float, complex)  Strings (str, unicode)  Coleções (list, tuple, dict, set, frozenset)  Lógicos (bool, int, None, vazio, cheio)  Nulo (NoneType)  Arquivos (file)  Observação  Tipos mutáveis: passagem por referência  Tipos imutáveis: passagem por valor
  • 19.
    Funções  def # Declarando def funcao(): '''Aqui descrevemos o que a função faz.''' pass return valor # opcional # Chamando funcao()
  • 20.
    Funções  Parâmetros  Não existe sobrecarga de assinaturas  Tipos de parâmetros:  Simples (obrigatórios)  Com valor default (opcionais)  Lista de argumentos  Dicionario de argumentos  Namespace próprio  Ofusca variáveis globais  Global  Funções embutidas
  • 21.
    Fatorial – Exercício  Crie uma função fat recursiva que calcule o fatorial de um inteiro  Documente-a usando uma docstring  Execute help(fat) e observe o resultado
  • 22.
    Resposta def fat(inteiro): '''Retorna o fatorial de um número inteiro.” if inteiro == 1: return 1 else: return inteiro * fat(inteiro - 1)
  • 23.
    Documentação  Baseada nos docstrings  help()  PyDoc  pydoc modulo.py  pydoc -p 8000  pydoc -g  Manual de referência
  • 24.
    Módulos  import, from, as, * # Usos mais comuns import modulo_ou_pacote import pacote.modulo # Importando um módulo específico dentro de um pacote from pacote import modulo # Importando tudo (__all__) do pacote para o namespace atual from pacote import * # Alias de importações import modulo_ou_pacote as alias from pacote import modulo as alias
  • 25.
    Pacotes  Pastas com módulos  Facilitam a organização  __init__.py  Pode ser um arquivo vazio  Pode conter código de inicialização  Define quais módulos são importados com *
  • 26.
    Biblioteca padrão  Mais tipos (decimal, csv, datetime)  Extensão dos tipos embutidos (string)  Funções do interpretador (sys)  Acesso ao sistema operacional (os)  Expressões regulares (re)  Persistência (anydbm, pickle, sqlite3, API)  GUI (TkInter)  Threads (thread, threading, etc)  E muito mais!