Python Emsl2009
Upcoming SlideShare
Loading in...5
×
 

Python Emsl2009

on

  • 951 views

Minicurso de Python ministrado no Encontro Mineiro de Software Livre

Minicurso de Python ministrado no Encontro Mineiro de Software Livre

Statistics

Views

Total Views
951
Views on SlideShare
950
Embed Views
1

Actions

Likes
1
Downloads
18
Comments
0

1 Embed 1

http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Python Emsl2009 Python Emsl2009 Presentation Transcript

  • Julio Cesar Eiras Melanda - jcemelanda@gmail.com 14/10/09
  • Conteúdo
    • Objetivos
    • O que é Python
    • Características Importantes
      • Paradigma
      • Compilação
      • Tipagem
      • Escopo de variáveis
      • Multiplataforma
      • Estruturas de dados nativas
      • Outras características
  • Conteúdo (cont.)
    • Programando
      • Começando...
      • Sintaxe básica
      • Fora do interpretador
      • Controle de fluxo – seleção
      • Controle de fluxo – laço
      • Controle de fluxo – laço
      • 'Abrangência' de listas – List comprehension
      • Subprogramas
      • Orientação a Objetos
      • Programação funcional
  • Conteúdo (cont.)
    • Módulos
      • Importando módulos
      • Módulos da biblioteca padrão
      • A função dir()
      • Outros módulos
    • Programas que usam Python
    • Referências
  • Objetivos Apresentar a linguagem de programação Python em sua versão 2.x pois houve quebra de compatibilidade na versão 3.0 que ainda não é largamente usada. Desta forma, serão abordados tópicos referentes ao projeto da linguagem, suas características, exemplos de como funciona a programação e programas que usam esta linguagem que está entre as que mais vem crescendo em importância nos últimos anos.
  • O que é Python Python é uma linguagem de programação poderosa e fácil de aprender que possui estruturas de alto nível, com uma abordagem simples e efetiva à programação orientada a objetos. [1] Foi criada no início da década de 90 por Guido van Rossum na Holanda no Stichting Mathematisch Centrum. Todos os releases, exceto 1.6, 1.6.1 e 2.0 são distribuídos sob licença GPL-compatível. [2] O nome vem do show da BBC “Monty Python's Flying Circus”, e não das cobras de mesmo nome.[1] Python é muito versátil podendo ser usada em aplicativos Web do lado servidor, jogos, programas de controle e configuração de sistemas, scripts, editores de imagens, music players, Web browsers e muito mais.
  • Características Importantes
  • Características Importantes
    • Paradigmas
      • Multi-paradigma
        • Orientada a Objetos
        • Procedural
        • Funcional
        • Scripting
    • Compilação
      • Interpretada
      • Programação interativa
      • Bytecodes
  • Características Importantes
    • Tipagem
      • Dinâmica
      • Forte
    • Escopo de variáveis
      • Estático com vinculação dinâmica
      • Podem ser acessados diretamente:
        • Variáveis locais
        • Variáveis globais
        • Variáveis externas (nomes pré-definidos)
  • Características Importantes
    • Multiplataforma
      • Windows
      • GNU/Linux
      • MacOS
      • PalmOS
      • Symbian
    • Estruturas de dados nativas
      • Listas
      • Dicionários
      • Tuplas
      • Conjuntos
  • Características Importantes
    • Outras características
      • Tudo é objeto (inclusive tipos de dados)
      • Tipo nativo para números complexos
      • Extensa biblioteca padrão
      • Muitos módulos externos
      • Suporta coerção
  • Programando
  • Começando...
    • Na programação interativa, basta abrir o interpretador e digitar os comandos
    >>> print “Olha eu aqui!” #isto é um comentário Olha eu aqui! >>> x = '3' #Não precisa declarar x >>> x #Mostra o objeto vinculado ao nome x '3'
  • Sintaxe Básica
    • Blocos são definidos por identação
    >>> i = 0 #Sem ';' no final da instrução >>> while i < 2: #Sem begin ou { ... print i, #vírgula evita quebra de linha ... i += 1 #operador de atribuição composto ... #sem end ou } 0 1
    • O ':' indica que a próxima instrução faz parte de um bloco
  • Fora do interpretador
    • Código fonte em arquivo .py
    • Exemplo:
    #!/usr/bin/env python #-*- coding: utf8 -*- #mentira.py '''Mostra uma mentira na tela''' print “Não fui eu!!!”
    • Primeira linha para chamar o interpretador python (somente em Unix-like)
    • Segunda linha conta para o interpretador qual a codificação do arquivo. Sem ela, é levantada uma exceção se houver caracteres não ASCII.
  • Fora do interpretador (cont.)
    • A terceira linha é um comentário com o nome do arquivo python. É convenção colocar este comentário em todos os arquivos criados.
    • A quarta linha é uma dosctrnig (texto de documentação). Todos objetos devem ter uma docstring antes de começar com as instruções propriamente (convenção).
    • Finalmente a instrução que será interpretada e executada
  • Controle de fluxo - seleção
    • Em python não existe switch
    if x < 0 : pass #usado para não fazer nada else: pass if y == 1 : #if e elif funcionam como cases pass #com a vantagem de aceitar elif y > 2 : #expressões pass else: #Faz o papel do default pass
  • Controle de fluxo - seleção
    • Fazer um switch usando dicionários:
    • def case_1():
      • print &quot;um&quot;
    • def case_2():
      • print &quot;dois&quot;
    • def case_3():
      • print &quot;tres&quot;
    • switch ={ '1' :case_1,
      • '2': case_2,
      • '3' :case_3}
      x = raw_input() try: #pega excessão
        switch[x]()
      except:
        print &quot;default&quot;
  • Controle de fluxo - laço
    • Temos duas instruções para laços – for e while (não tem do )
    • while executa um laço condicional pós-teste
    while x >= 0 : y = x * x x -= 1
    • for executa iteração sobre uma lista
    for i in [ 1 , 2 , 3 , 4 ]: print ( ' i vale %d' ) % i
    • Podemos gerar listas com a função range()
    >>> range (5) [0, 1, 2, 3, 4]
  • Controle de fluxo - laço
    • Para controle com instruções localizadas pelo usuário temos as instruções break e continue do mesmo modo que em C
    • Para os casos em que o laço terminar normalmente significa algo, usa-se a instrução else
    for i in range ( 2 , 10 ): for n in range ( 2 , n): if i % n == 0: print i, '=' , n, '*' , i/n break else: print i, 'é um número primo'
  • 'Abrangência' de listas
    • Utilizado para avaliar listas de forma clara e concisa.
    • >>> vet = [2, 4, 6]
    • >>> [3*x for x in vet]
    • [6, 12, 18]
    • >>> [[x,x**2] for x in vet]
    • [[2, 4], [4, 16], [6, 36]]
    • >>> [2*x for x in vet if x > 3]
    • [8, 12]
  • Subprogramas
    • Todos subprogramas são funções
    • Funções sem return, ou com return sem parâmetros retornam None
    def fib(n): ''' Calcula fibonacci até n ''' a, b = 0 , 1 #Atribuições simultâneas while b < n: print b a, b = b, a + b #Avalia da esquerda #para a direita
  • Subprogramas (cont.) def continuar(opcao = true ): ''' continua alguma coisa ''' if opcao: print “Continuando” else: print “Você decidiu parar” >>> continuar() #parâmetro é opcional Continuando >>> continuar( false ) Você decidiu parar
  • Orientação a Objetos
    • Tudo é objeto, da estrutura mais simples à mais complexa
    • Classes
    • class MinhaClasse(SuperClasse1):
      • ''' Docstring qualquer '''
      • atributo1 = 'valor do atributo 1'
      • _atributo2 = 9
      • def __init__( self , atributo1, atributoS):
        • self.atributo1 = atributo1
        • SuperClasse1.__init__(atributoS)
      • def metodo1( self , *params):
        • pass
  • Orientação a objetos
    • Python possui herança múltipla
    • Todo método de classe recebe o parâmetro self
    • Atributos não públicos : _atributo2
    • Método __init__ é o primeiro a ser executado
    • __init__ não é um construtor
  • Orientação a objetos (cont.)
      x = classe() #Instanciando... y = classe2(param) x.metodo1(param1, param2) #utilizando métodos z = y.troca1(a, b) var = x.atributo1 #utilizando atributo y.atributo2 = 'Arara' #'setando' atributos
  • Programação funcional
    • filter(func, lista) retorna uma sequência com os itens da lista para os quais func é verdadeiro
    • def f(x): return x % 2 != 0 and x % 3 != 0
    • >>> filter (f, range (2, 25))
    • [5, 7, 11, 13, 17, 19, 23]
    • map(func, lista) aplica func(item) em cada item da lista retornando uma lista de valores retornados por func(item)
    • def f(x): return x*x*x
    • >>> map (f, range (1, 5))
    • [1, 8, 27, 64] # códigos extraídos de [1]
  • Programação funcional (cont.)
    • reduce(func, lista) aplica sucessivamente func aos elementos de lista dois a dois, retornando um único valor
    • def add(x, y): return x + y
    • >>> reduce (add, range (1, 11))
    • 55
    • Funções lambda: cria funções anônimas simples
    • def incrementa(n)
      • return lambda x: x + n #somente uma
    • >>> f = incrementa(20) #expressão
    • >>> f(20)
    • 40
  • Módulos
  • Importando Módulos
    • Para simplesmente importar o módulo:
    • >>> import modulo
    • Para importar tudo de um módulo
    • >>> from modulo import *
    • Para importar algo de um módulo
    • >>> from modulo import classe
    • >>> import modulo.class
  • Módulos da biblioteca padrão
    • math
    • >>> import math
    • >>> math.pi
    • 3.1415926535897931
    • >>>math.cos(2*math.pi)
    • 1.0
    • os
    • >>> import os
    • >>> os.getpid()
    • 5411
    • >>> os.system('clear') #limpa a tela
  • Módulos da biblioteca padrão (cont.)
    • random
    • >>> import random
    • >>> random.choice(['pera', 'uva', 'maca'])
    • 'uva'
    • >>> random.random()
    • 0.81454527066344051
    • >>> random.randrange(10)
    • 7
  • A função dir()
    • Retorna uma lista com todos os nomes contidos num módulo
    • >>> dir(math)
    • ['__doc__', '__file__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'hypot', 'isinf', 'isnan', 'ldexp', 'log', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
  • A função dir() (cont.)
    • Sem parâmetros, retorna os nomes gloabais atuais
    >>>x = 2 >>> dir() ['__builtins__', '__doc__', '__name__', '__package__', 'x']
  • Outros Módulos
    • Interfaces gráficas
      • wxPython
      • TkInter
      • PyQt
      • PyGTK
    • Científico e numérico
      • numpy
      • scipy
      • ScientificPython
      • BioPython
  • Outros Módulos (cont.)
    • Jogos
      • Pygame
    • Imagens
      • PyOpenGL
      • PyOgre
      • Soya 3D
      • Panda 3d
    • Web
      • Django
      • TurboGears
      • Zope
  • Programas que usam Python
    • YUM
    • Wicd
    • BitTorrent
    • ForecastWatch
    • Wing IDE
    • Blender (renderização de imagens)
    • OpenOffice
    • Scribus
    • Vim
    • GIMP
    • Inkscape
    • Poser
    • Jogos
      • Battlefield 2 (Windows)
      • Civilization IV (Windows)
      • Frequency (PS2)
      • Freedom Force (Windows, MacOSX)
      • Star Trek Bridge Commander (Windows)
      • Vegastrike (Multiplataforma)
      • Frets On Fire (Multiplataforma)
      • SnakeWorlds (Multiplataforma)
      • SolarWolf (Multiplataforma)
  • Frets On Fire Civilization IV
  • The Gimp Scribus
  • Mount & Blade PySol
  • Inkscape Poser
  • Solar Wolf Snake Worlds
  • Referências
    • Rossum, Guido von, PythonTutorial– Release 2.4.2, 2005, Python Software Foundation
    • Rossum, Guido von, Python Tutorial – Release 2.6.1, 2009, Python Software Foundation - [1]
    • Rossum, Guido von, The Python Language Reference – Release 2.6.1, 2009, Python Software Foundation - [2]
    • Pilgrim, Mark, Dive Into Python – versão 5.4, 2004, diveintopython.org
  • Obrigado!!!