Python Emsl2009

46
Julio Cesar Eiras Melanda - [email protected] 14/10/09

Transcript of Python Emsl2009

Page 1: Python Emsl2009

Julio Cesar Eiras Melanda - [email protected]/10/09

Page 2: Python Emsl2009

ConteúdoObjetivos

O que é Python

Características Importantes

Paradigma

Compilação

Tipagem

Escopo de variáveis

Multiplataforma

Estruturas de dados nativas

Outras características

Page 3: Python Emsl2009

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

Page 4: Python Emsl2009

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

Page 5: Python Emsl2009

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.

Page 6: Python Emsl2009

O que é PythonPython é 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.

Page 7: Python Emsl2009

Características Importantes

Page 8: Python Emsl2009

Características ImportantesParadigmas

Multi-paradigma

Orientada a Objetos

Procedural

Funcional

Scripting

Compilação

Interpretada

Programação interativa

Bytecodes

Page 9: Python Emsl2009

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)

Page 10: Python Emsl2009

Características ImportantesMultiplataforma

Windows

GNU/Linux

MacOS

PalmOS

Symbian

Estruturas de dados nativas

Listas

Dicionários

Tuplas

Conjuntos

Page 11: Python Emsl2009

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

Page 12: Python Emsl2009

Programando

Page 13: Python Emsl2009

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'

Page 14: Python Emsl2009

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

Page 15: Python Emsl2009

Fora do interpretadorCó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.

Page 16: Python Emsl2009

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

Page 17: Python Emsl2009

Controle de fluxo - seleçãoEm 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

Page 18: Python Emsl2009

Controle de fluxo - seleçãoFazer um switch usando dicionários:

def case_1():

print "um"

def case_2():

print "dois"

def case_3():

print "tres"

switch ={'1':case_1,

   '2':case_2,

   '3':case_3}

x = raw_input()

try:  #pega excessão

switch[x]()

except:

print "default"

Page 19: Python Emsl2009

Controle de fluxo - laçoTemos 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]

Page 20: Python Emsl2009

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/nbreak

else:

print i, 'é um número primo'

Page 21: Python Emsl2009

'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]

Page 22: Python Emsl2009

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

Page 23: Python Emsl2009

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

Page 24: Python Emsl2009

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

Page 25: Python Emsl2009

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

Page 26: Python Emsl2009

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

Page 27: Python Emsl2009

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]

Page 28: Python Emsl2009

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

Page 29: Python Emsl2009

Módulos

Page 30: Python Emsl2009

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

Page 31: Python Emsl2009

Módulos da biblioteca padrãomath

>>> 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

Page 32: Python Emsl2009

Módulos da biblioteca padrão (cont.)

random

>>> import random

>>> random.choice(['pera', 'uva', 'maca'])

'uva'

>>> random.random()

0.81454527066344051

>>> random.randrange(10)

7

Page 33: Python Emsl2009

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']

Page 34: Python Emsl2009

A função dir() (cont.)

Sem parâmetros, retorna os nomes gloabais atuais

>>>x = 2

>>> dir()

['__builtins__', '__doc__', '__name__', '__package__', 'x']

Page 35: Python Emsl2009

Outros Módulos

Interfaces gráficas

wxPython

TkInter

PyQt

PyGTK

Científico e numérico

numpy

scipy

ScientificPython

BioPython

Page 36: Python Emsl2009

Outros Módulos (cont.)Jogos

Pygame

Imagens

PyOpenGL

PyOgre

Soya 3D

Panda 3d

Web

Django

TurboGears

Zope

Page 37: Python Emsl2009

Programas que usam Python

Page 38: Python Emsl2009

YUM

Wicd

BitTorrent

ForecastWatch

Wing IDE

Blender (renderização de imagens)

OpenOffice

Scribus

Vim

GIMP

Inkscape

Poser

Page 39: Python Emsl2009

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)

Page 40: Python Emsl2009

Frets On Fire

Civilization IV

Page 41: Python Emsl2009

The Gimp 

Scribus

Page 42: Python Emsl2009

Mount & Blade

PySol

Page 43: Python Emsl2009

Inkscape

Poser

Page 44: Python Emsl2009

Solar Wolf

Snake Worlds

Page 45: Python Emsl2009

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

Page 46: Python Emsl2009

Obrigado!!!