Python
Andrea Menezes (afm3)
Maíra Nascimento (mcn2)
Agenda
O que é Python Por que usar python História Quem usa Python Características A Liguagem
O que é Python
Python
Linguagem de alto nível Orientada a Objetos Interpretada Não é apenas uma linguagem de script Fácil de usar e de aprender
Por que usar Python
Por que usar Python?
Conceitos fundamentais simples Sintaxe clara – muito próxima de um
pseudo-código Código curto e legível Tipos pré-definidos poderosos Possui um vasto repertório de bibliotecas Ciclo de desenvolvimento rápido
Por que usar Python?
Licença Open Source Pouco punitiva: poucas regras arbitrárias; Extensível (adicionar novos módulos)
C/C++ Java (através Jython)
Extremamente portável Unix/Linux, Windows, Mac, PalmOS, WindowsCE,
RiscOS, VxWorks, QNX, OS/2, OS/390, AS/400, PlayStation, Sharp Zaurus, BeOS, VMS…
História
Breve História Criada por Guido van Rossum em 1989 no Centrum voor Wiskunde en Informatica
(CWI), em Amsterdã,Holanda. Linguagem de scripts para o sistema
operacional distribuído Amoeba Baseada na linguagem ABC, desenvolvida no
CWI por Guido e outros nas décadas de 70 e 80.
O nome Python teve origem no grupo humorístico britânico Monty Python.
Versões
26 de janeiro de 1994 – versão 1.0 1998 – JPython 16 de outubro de 2000 – versão 2.0 19 de setembro de 2006 – versão 2.5
(atual)
Quem usa Python
No Mundo
NASA (vários projetos) Yahoo! (Yahoo mail & groups) Apple, H.P., Microsoft Muitas Universidades, como MIT, e
Stanford
Sistema de ajuda do GMail Google Groups Sistema de compilação de aplicativos (build
system). Sistema de empacotamento e entrega de dados
(packaging system). Sistema de monitoramento e manutenção do
cluster Sistema de testes
No Brasil
Jornal do Brasil, AOL Brasil Embratel: monitoramento das interfaces de
backbone e clientes de internet, também existem 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
Características
Compilada X Interpretada
Interpretada Interpretador interativo Compilador de byte code
compilação implícita e automática
Paradigma
Orientada a Objetos Suporte a outros paradigmas
EstruturalFuncional
Fácil integração com outras linguagens
Sistema de Tipos
Fortemente tipadaObjetos não podem mudar de tipo Não há conversão automática de tipos
Tipagem dinâmicaNão há declaração de variáveis
Outras
Poderosas estruturas de dados nativas Listas Dicionários
Identação para estrutura de bloco Blocos demarcados por espaços
print "O valor de a "if a == 0:
print "zero"else:
print a
A Linguagem
Comentários e Comentários Funcionais Após o caractere “#” até o final da linha, tudo é
considerado um comentário e ignorado, exceto pelos comentários funcionais.
Definindo a codificação do arquivo fonte #−− coding: <encoding−name> −−
Em sistemas Posix pode-se usar o comentário funcional #!/usr/bin/env python para executar o arquivo com o comando python encontrado no ambiente. Isto não é característico de Python, mas dos sistemas Posix.
Indentação
Em Python, os blocos de código são delimitados pelo uso de indentação.
A indentação não precisa ser consistente em todo o arquivo, só no bloco de código. Uma boa prática é ser consistente no projeto todo.
Cuidado ao misturar TAB e Espaços: configure seu editor!
Variáveis
Tipagem dinâmica uma variável não tem tipo fixo, ela tem o tipo do
objeto que ela contém. Não precisam ser declaradas Variáveis são criadas quando atribuídas pela
primeira vez Variáveis devem ser atribuídas antes de serem
referenciadas “Tudo” é uma variável
Funções, classes, módulos ...
Tipos de Dados
Variáveis Numéricas Imutáveis
num_int = 13
num_int_long = 13L
num_real = 13.0
Tipos de Dados
Strings ImutáveisCriação
texto1 = ‘abcdefghij ‘ texto2 = “outro texto” texto3 = ‘’’este texto
tem varias
linhas ‘’’
Tipos de Dados
Strings Acesso a elementos pelo índice
texto1 = ‘abcdefghij ‘
print texto1 [ 2 ] # Imprime ’ c ’
print ’GSB ’[ 1 ] # Imprime ’ S ’
Principais Métodos:
split, count, index, join, lower, upper, replace
Tipos de Dados
TuplasFormadas por elementos de qualquer
tipoDelimitadas por parênteses. ‘(‘ e ‘)’ Imutáveis
não se pode acrescentar apagar ou modificar valores
Vantagem: eficiente
Tipos de Dados
Listas Formadas por elementos de qualquer tipo Criação
lista = [ 10 , 2 , 3 , ’texto’ , 20 ] Acesso a elementos pelo índice
print lista [ 2 ] # imprime ’3 ’
Principais Métodos:append, count, index, insert, pop,
remove,reverse, sort
Listas
Dado uma lista “lista”, verifique se “valor” está dentro dela, caso verdade imprima “Sim”, senão imprima “Não”.
Dado uma lista “lista”, itere sobre a lista, imprimindo cada um de seus elementos.
Dado uma lista “lista”, crie uma nova lista “rotaciona_3” que cada posição está rotacionada em 3 posiçõeses, isto é, indice0 = indice + 3.
Tipos de Dados
Dicionários Formados por pares de chave-valor Delimitados por chaves. ‘{‘ e ‘}’
d = { ’chave ’: ’valor ’ , ’linguagem ’: ‘python’ }
Chave sempre um valor Imutável!lista = [ 1 , 2 ]
d[ lista ] = ’outro valor ’ #TypeError: list object are unhashable
Tipos de Dados
Dicionários Principais Métodos:
copy, get, has_key, items, keys, update, values
Obtendo iteradores (otimizado para for):for chave in d.iterkeys ():print chave
for valor in d.itervalues ():print valor
for chave , valor in d.iteritems ():print chave , ‘=‘ , valor
Dicionários
Crie um dicionário d e coloque nele seus dados: nome, idade, telefone,endereço.
Usando o dicionário d criado anteriormente, imprima seu nome.
Também usando d, imprima todos os itens do dicionário no formato chave : valor, ordenado pela chave.
Controle de Fluxo
if exp:#comandos
else:
#comandos
if exp:#comandos
elif exp:#comandos
else:#comandos
Controle de Fluxo
Os seguintes valores são considerados falsos: None False Valor 0 de viários tipos: 0, 0.0, 0L, 0j Seqüências vazias: ”, (), [] Mapeamentos vazios Instâncias de objetos que definam __nonzero__() que
retorne valor False ou 0 Instância de objetos que definem o __len__() o qual
retorne 0.
Controle de Fluxo
Implemente o seguinte conjunto de regras em Python: Se a for verdadeiro e b for falso, imprima “Caso 1” Senão, Caso a for falso e b for verdadeiro, imprima
“Caso 2” Caso contrário:
Caso c for maior que 10 e d estiver entre 0.0 e 100.0, imprima “Caso 3”
Caso e estiver na lista lst, imprima “Caso 4” Senão imprima “Caso 5”
Estruturas de Repetição
for var in seq:
#comandos
for num in range(200):
print num
while exp: #comandos
from time import timestart = time ()while time () - start < 3.0: print “ esperando ... “
Estruturas de Repetição
Python fornece a cláusula else para os laços. Será executada quando a condição do laço for falsa.
for elemento in lista : if elemento == parada : break print elementoelse :
print " Laço chegou ao fim “
No exemplo acima, a mensagem “Laço chegou ao fim” só é imprimida caso não existir um elemento que seja igual a “parada”.
Estrutura de Repetição
Dada uma lista de palavras “lista” e uma palavra “chave” imprima o índice do elemento que encontrou a palavra, senão imprima “Palavra Não Encontrada”.
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 = 99def func(y):
z = x+y #x não é atribuído então é globalreturn z
func(1)
Funções
É possível definir argumentos defaults 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
Funções
Número variável de argumentos argumentos são passados para a função na forma de
uma lista
def arg_sem_nome ( * args ):for arg in args :
print " arg :" , arg
arg_sem_nome ( ’a’ , ’b’ , 123 )
Funções
Número variável de argumentos argumentos são passados para a função na forma de
um dicionário, o nome do argumento é a chave
def arg_com_nome ( ** kargs ):for nome , valor in kargs . iteritems ():
print nome , "=" , valor
arg_com_nome ( a=1 , b=2 , teste =123 )
Módulos
Módulos são funções definidas em arquivos separados Itens são importados utilizando from ou import
from module import functionfunction()
import modulemodule.function()
Módulos são “namespaces” Podem ser utlizados para organizar nomes de variáveis.
mod1.umValor = mod1.umValor - mod2.umValor
Classes
class A:atributo1 = 'atributo1 da classe A'atributo2 = 'atributo2 da classe A‘
def __init__(self, val_ini=1): " " " Construtor da classe A" " "self.atributo_de_instacia = val_ini
def metodo (self):print self.atributo_de_instaciaprint A.atributo1
Classes
import datetimeclass Pessoa ( object ):
def __init__ ( self , nome , nascimento ):self . nome = nomeself . nascimento = nascimento
def idade ( self ):delta = datetime . date . today () - self . nascimentoreturn delta . days / 365
def __str__ ( self ):return ’%s , % d anos ’ % ( self .nome , self . idade () )
Classes
Atributos de Classe São atributos que estão na classe, não na instância São compartilhados entre todas as instâncias
(economia de memória) Os valores são instanciados/atribuídos ao ler a
definição de classe Úteis para casos como Jogos, onde uma imagem
deve ser compartilhada por todos os personagens idênticos, economizando memória
Úteis para fazer “lock” em regiões críticas, evitar condições de corrida, etc...
Classes
Atributos de classesclass C( object ):
l = []
c1 = C()c2 = C()c1.l.append ( 1 )
print c1.l # imprime [ 1 ]print c2.l # imprime [ 1 ]print C.l # imprime [ 1 ]
Classes
Atributos Públicos e Privados Nomenclatura define atributos/métodos públicos e
privados Privados: nomes que se iniciam com __ e não terminam
com __. Públicos: os outros nomes possíveis. Convenciona-se que atributos/métodos que se iniciam e
terminam com __ (portanto públicos) são de uso interno da classe, apesar de poderem ser utilizados pelo mundo externo.
Classes Propriedade
Escrita e leitura dos atributos
class C( object ):def __init__ ( self ):
self . __x = Nonedef getX ( self ):
return self . __xdef setX ( self , valor ):
if isinstance ( valor , int ): self . __x = valorelse : raise TypeError ( “x precisa ser inteiro !” )
x = property ( getX , setX )
c = C()c.x = 1c.x = ’abc ’ # TypeError : x precisa ser inteiroprint c.x
Exceções
try:algumaCoisa()
except:print ‘Erro’
else:# Será executado se quando não houver exceçãooutraCoisa()
Exceções
try:algumaCoisa()
finally:# Será executado sempre! (com ou sem exceção)outraCoisa()
# Podemos usar except ou finally, nunca os dois!
Arquivos
Lendo todo o conteúdo para a memória:arquivo = open ( ’nome_arq.txt ’ )conteudo = arquivo.read ()arquivo.close ()
Lendo todas as linhas para a memória (lista):arquivo = open ( ’nome_arq.txt ’ )linhas = arquivo.readlines ()arquivo.close ()
Lendo uma quantidade específica de bytes:arquivo = open ( ’nome_arq.txt ’ )comeco = arquivo.read ( 20 ) # 20 primeiros bytesarquivo.close ()
Arquivos
Lendo com laços:arquivo = open ( ’nome_arq.txt ’ )# idêntico a arquivo.readlines()for linha in arquivo :
print linha
arquivo = open ( ’nome_arq.txt ’ )while True :
linha = arquivo.readline ()if linha == “”:
breakprint linha
Exercício
Contador de Palavras
Pedir Arquivo Ler Arquivo Contar quantas vezes aparece cada
palavra Listar as palavras em ordem alfabética,
junto com o seu número de repetições no texto
Referências
Python Language Reference http://docs.python.org/ref/ref.html
Python Library Reference http://docs.python.org/lib/lib.html
Python Tutorial http://docs.python.org/tut/tut.html
Python Brasil http://www.pythonbrasil.com.br/moin.cgi/PythonBrasil