Python - O limite é a sua
imaginação!
Emanuel Rocha Woiski
Departamento de Engenharia Mecânica
Unesp – Campus de Ilha Solteira
28/9/2005
CREEM2005
1
Conteúdo
Qual a Origem?
A Linguagem Python
O que é Python?
Por que usar Python?
Quem está utilizando? ...E no Brasil?
Interfaces para…
Shell Interativa
Tipos de dados
Demais Elementos da Linguagem...
28/9/2005
CREEM2005
2
Qual a Origem?
Criada em 1989 pelo holandês Guido van Rossum no
Centrum voor Wiskunde en Informatica (CWI), em
Amsterdã, Holanda.
Influenciada pela linguagem ABC, desenvolvida no CWI
por Guido e outros nas décadas de 70 e 80. ABC tinha
um foco bem definido: ser uma linguagem de
programação para usuários inteligentes de computadores
que não eram programadores: Físicos, Cientistas Sociais
e até Lingüistas.
O projeto de sistema operacional distribuído Amoeba
precisava de uma linguagem de script.
Nasce o Python.
28/9/2005
CREEM2005
3
A linguagem Python
Origem nome: Monty Python’s Flying Circus
Linguagem O-O de prototipação ágil
Não apenas linguagem de script
Fácil de usar, aprender, ler
Extensível (adicionar novos módulos)
C/C++
Java (através Jython)
Madura (13 anos)
Design limpo, simples, fácil entender
ler como se fosse “pseudo-código”
28/9/2005
CREEM2005
4
O que é Python?
Linguagem de programação orientada a objetos
Linguagem de muito alto nível (VHLL)
Dinamicamente (mas fortemente) tipada
Multi-plataforma
Windows, HP-UX, SunOS, Linux (todas as
distribuições), PalmOS, Symbian, Java, entre
outras
OpenSource e licença compatível com GPL (Free
Software) a partir de sua versão 2.0
28/9/2005
CREEM2005
5
Por que usar Python?
Uma das linguagens mais divertidas que se tem
atualmente
Já vem com “baterias inclusas” (vasto repertório de
bibliotecas)
Protótipos rápidos sem preocupação com detalhes de
implementação da linguagem
Linguagem Interpretada: evita “codifica-compilaroda”. A Máquina Virtual já vem inclusa..
Bem menos linhas de código comparando com Java,
C/C++...
28/9/2005
CREEM2005
6
Quem está utilizando?
Google (vários projetos)
NASA (vários projetos)
Yahoo! (Yahoo mail & groups)
RealNetworks (function and load testing)
RedHat e outras distros (ferramentas de instalação
Linux)
Zope Corporation (gerenciamento de conteúdo)
Apple, H.P., Microsoft, Disney, Bank Boston
Muitas Universidades, como MIT, e Stanford
(inclusive para ensino de programação)
Jornal do Brasil, AOL Brasil
Industrial Light & Magic (gerenciamento de C e C++)
28/9/2005
CREEM2005
7
...E no Brasil?
Embratel: monitoramento de backbone e clientes de
internet e scripts de uso interno.
CPqD: monitoramento de centrais telefônicas.
Conectiva: Gerenciamento de pacotes da distribuição Linux
e ferramentas de uso interno.
Async: desenvolvimento de software de automação
comercial.
GPr Sistemas: Desenvolvimento de aplicações sob
encomenda, sistemas como monitoramento de transporte
terrestre via satélite são as soluções já feitas
Outras que utilizam o Python para sistemas Web, como
Varig, Serpro, Câmara, Interlegis, ...
Os sistemas web de gestão de conteúdo usando o trio
Python/Zope/Plone vem crescendo a cada dia,
principalmente em empresas grandes e no governo.
28/9/2005
CREEM2005
8
Interfaces para…
28/9/2005
XML
DOM, expat
XMLRPC, SOAP, Web Services
Base de dados relacional e orientada a objetos
MySQL, PostgreSQL, Oracle , ODBC, Sybase,
Informix e, é claro, ZODB
Java (via Jython)
Objective C
COM, DCOM (.NET too)
Many GUI libraries
cross-platform
Tk, wxWindows, GTK, Qt
platform-specific
MFC, Mac (classic, Cocoa), X11
CREEM2005
9
Shell Interativa
Ótimo para aprender a linguagem
Experimentar bibliotecas
Testar novos módulos
Digite comandos ou expressões no prompt
>> print “Hello world!”
Hello world!
>> x = 2 ** 3
>> x / 2
4
>>
28/9/2005
CREEM2005
10
Tipos de dados
Números: int, long (precisão ilimitada!), float,
complex, boolean (True, False)
Strings, ASCII/Unicode: imutável
Listas, tuplas and dicionários: “containers”
Módulos estendidos podem definir novos tipos de
dados primitivos
28/9/2005
CREEM2005
11
Variáveis
Sintaxe: (underscore ou letra) + (qualquer número
de dígitos ou underscores)
Case sensitivas
Nomes são criados quando atribuídos pela primeira
vez
Nomes devem ser atribuídos antes de serem
referenciados
spam = 'Spam'
#básico
spam, ham = 'yum', 42
#tupla
spam = ham = 'lunch'
#múltiplo
28/9/2005
CREEM2005
12
Atribuição
Atribuição manipula referências
x = y não faz uma cópia de y
x = y faz x referenciar ao objeto que y referencia
Bastante útil, mas cuidado!
Exemplo:
>>> a = [1, 2, 3]
>>> b = a
>>> a.append(4)
>>> print b
[1, 2, 3, 4]
Para obter um novo objeto, ao invés de um ponteiro para
um objeto existente deve-se usar o módulo copy
28/9/2005
CREEM2005
13
Ilustração do Exemplo
a = [1, 2, 3]
a
1
2
3
1
2
3
1
2
3
a
b=a
b
a
a.append(4)
Mas
4
b = [1, 2, 3, 4]
28/9/2005
CREEM2005
14
Strings
"hello"+"world"
"hello"*3
"hello"[0]
"hello"[-1]
"hello"[1:4]
‘hello’[1:4:2]
‘hello’[::-1]
len("hello")
"hello" < "jello"
"e" in "hello"
28/9/2005
"helloworld" # concatenação
"hellohellohello" # repetição
"h"
# indexação
"o"
# (do final)
"ell"
# “slicing”
‘el’
# com intervalo
‘oellh’
# reversa
5
# tamanho
1
# comparação
1
# busca
CREEM2005
15
Listas
Arrays flexíveis
a = [98, ‘bottles of beer’, [‘on’, ‘the’, ‘wall’]]
Mesmas operações para Strings
a+b, a*3, a[0], a[-1], a[1:], len(a)
Item e slice
a[0] = 98
a[1:2] = [‘bottles’, ‘of’, ‘beer’]
-> [98, ‘bottles’, ‘of’, ‘beer’, [‘on’, ‘the’, ‘wall’]]
del a[-1]
# -> [98, ‘bottles’, ‘of’, ‘beer’]
28/9/2005
CREEM2005
16
Mais operações com Listas
>>>
>>>
>>>
5
>>>
>>>
42
>>>
a = range(5)
a.append(5)
a.pop()
# [0,1,2,3,4]
# [0,1,2,3,4,5]
# [0,1,2,3,4]
a.insert(0, 42)
a.pop(0)
# [42,0,1,2,3,4]
# [0,1,2,3,4]
a.reverse()
# [4,3,2,1,0]
>>> a.sort()
28/9/2005
# [0,1,2,3,4]
CREEM2005
17
Dicionários
Hash tables, “arrays associativos”
d = {‘galinha’: ‘ave’, ‘água’: ‘líquido’}
Consulta:
d[‘galinha’] obtém-se ‘ave’
d[‘pato’] # ocorre a exceção KeyError
Deleta, Insere, Sobrescreve:
del d[‘água’] # {‘galinha’: ‘ave’}
d[‘peso’] = 3 # {‘galinha’: ‘ave’, ‘peso’: 3}
d[‘galinha’] = ‘bicho’ # {“galinha": ‘bicho’, ‘peso’:
3}
28/9/2005
CREEM2005
18
Mais operacões com
dicionários
Chaves(keys), Valores (values), Items (itens):
d.keys() -> [‘galinha’, ‘peso’]
d.values() -> [‘bicho’, 3]
d.items() -> [(‘galinha’,’bicho’), (‘peso’,3)]
Checar existência:
d.haskey(‘galinha’) -> 1 ou True
d.haskey(‘spam’) -> 0 ou False
Valores / Chaves de vários tipos:
{‘nome’:’Guido’, ‘idade’:43, (‘hello’,’world’):1,
42:’yes’, ‘flag’: [‘red’,’green’,’blue’] }
28/9/2005
CREEM2005
19
Tuplas
pessoa = (sobrenome, prenome)
point = x, y, z
# parênteses opcional
x, y, z = point # unpack
x, y = 4.5, ‘borboleta’
# pack, unpack
sobrenome = key[0]
empty = ()
# parênteses!
tuplas vs. listas
tuplas são imutáveis!
28/9/2005
CREEM2005
20
Estruturas de controle
if condição:
statements
[elif condição:
statements] ...
else:
statements
while condição:
statements
for var in sequência:
statements
break
continue
28/9/2005
CREEM2005
21
Funções
def nome_da_funcao (arg1, arg2, ...):
“””doc
string””” # (docstring) string de documentação opcional
statement
...
statement
expressão
return
# só efeitos colaterais (sem retorno!)
# expressão de retorno
return expressão
28/9/2005
CREEM2005
22
Regras para escopo de funções
Regra LGB
Referências buscam 3 escopos: local, global, built-in
Atribuições criam ou modificam nomes locais por
default
Pode forçar argumentos a serem globais utilizando
global
Exemplo
x = 99
def func(y):
z = x+y # x não é atribuído então é global
return z
func(1) retorna 100
28/9/2005
CREEM2005
23
Passando argumentos para funções
Argumentos são passados por referência
Argumentos são atribuídos a nomes locais
Atribuições não afetam o chamador
Modificando um mutável pode afetar o chamador
def modificar (x,y):
x=2
#modifica x local apenas
y[0] = ‘hi’ #modifica o objeto compartilhado
28/9/2005
CREEM2005
24
Argumentos Opcionais
É possível definir argumentos default (padrão) que
não precisam ser passados.
def func(a, b, c=10, d=100):
print a, b, c, d
>>> func(1,2)
1 2 10 100
>>> func(1,2,3,4)
1,2,3,4
28/9/2005
CREEM2005
25
Argumentos como sequências
ou associações
def fun(*args, **kwrds):
for var in args:
print var,
for var in kwrds.items():
print var,
fun('casa', 3, 'idade', nome = 'Maria', sexo = 'feminino')
casa 3 idade (nome, ‘Maria’) (sexo, 'feminino')
28/9/2005
CREEM2005
26
Expressões
Chamadas para Funções
spam(ham, eggs)
Referência para Lista/dicionário
spam[ham]
Chamada para Atributos e Métodos (de classes e
outros objetos)
spam.ham
spam.ham(eggs)
Expressões Compostas
spam < ham and ham != eggs
Testes de Intervalos
spam < ham < eggs
28/9/2005
CREEM2005
27
Exceções
Informar e capturar uma condição anormal que ocorreu
Formato except: except (tipo_excecao_1,
tipo_excecao_2, ...) [, variavel_da_excecao]
a = [ 1, 2, 3 ]
try:
a[5]
except IndexError:
print “””Epa - o vetor não possui tantas
posições!“””
finally:
print ‘Fim do teste’
Epa - o vetor não possui tantas
posições!
Fim do teste
28/9/2005
CREEM2005
28
Módulos
Módulos são códigos definidos em arquivos separados.
objetos dos módulos são importados utilizando from ou
import
from modulo import alguma_funcao
alguma_funcao()
ou
import modulo
modulo.alguma _funcao()
Módulos são “namespaces” (espaços de nomes)
Podem ser utilizados para organizar nomes de variáveis
sem que haja colisão.
mod1.soma = mod1.soma - mod2.soma
28/9/2005
CREEM2005
29
Objetos arquivos (file)
f = open(filename[, mode[, buffersize])
mode can be "r", "w", "a" (tipo C stdio); default "r"
append "b" for text translation mode
append "+" for read/write open
Alguns Métodos:
read([nbytes]), readline(), readlines()
write(string), writelines(list)
seek(pos[, how]), tell()
flush(), close()
fileno()
28/9/2005
CREEM2005
30
Algumas funcões úteis
help() -> help interativo ou help(objeto), info. sobre
objeto
dir() -> lista atributos de um objeto
type() -> retorna tipo do objeto
raw_input() -> prompt de entrada de dados
int(), str(), float()… -> typecast (mudança de tipo)
chr(), ord() -> ASCII
max(), min() -> maior e menor de uma string, list ou
tuple
28/9/2005
CREEM2005
31
Classes
class Nome_da_Classe ( Classe_Pai_1 , Classe_Pai_2 ):
""" Docstring da classe .
"""
[Atributos da Classe]
def __init__ ( self , argumentos ):
[ Atributos de instância ]
[ Código do Construtor]
def nome_do_Metodo ( self , argumentos ):
[ Código do Método ]
28/9/2005
CREEM2005
32
Links
Site e portal oficial: http://www.python.org
Estilo codificação Python:
http://www.python.org/doc/essays/styleguide.html
Tkinter:
http://www.pythonware.com/library/tkinter/introduction/
Projeto Jython (Python em Java): http://www.jython.org/
Site oficial do Brasil: http://www.pythonbrasil.com.br/
28/9/2005
CREEM2005
33