Python - O limite é a sua imaginação!

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