6. 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
9. 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.
10. 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)
12. No Mundo
NASA (vários projetos)
Yahoo! (Yahoo mail & groups)
Apple, H.P., Microsoft
Muitas Universidades, como MIT, e
Stanford
13. Google
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
14. 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
16. Compilada X Interpretada
Interpretada
Interpretador interativo
Compilador de byte code
compilação implícita e automática
17. Paradigma
Orientada a Objetos
Suporte a outros paradigmas
Estrutural
Funcional
Fácil integração com outras linguagens
18. Sistema de Tipos
Fortemente tipada
Objetos não podem mudar de tipo
Não há conversão automática de tipos
Tipagem dinâmica
Não há declaração de variáveis
19. 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
21. 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.
22. 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!
23. 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 ...
24. Tipos de Dados
Variáveis Numéricas
Imutáveis
num_int = 13
num_int_long = 13L
num_real = 13.0
25. Tipos de Dados
Strings
Imutáveis
Criação
texto1 = ‘abcdefghij ‘
texto2 = “outro texto”
texto3 = ‘’’este texto
tem varias
linhas ‘’’
26. 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
27. Tipos de Dados
Tuplas
Formadas por elementos de qualquer
tipo
Delimitadas por parênteses. ‘(‘ e ‘)’
Imutáveis
não se pode acrescentar apagar ou modificar
valores
Vantagem: eficiente
28. 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
29. 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.
30. 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
31. 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
32. 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.
33. Controle de Fluxo
if exp:
#comandos
else:
#comandos
if exp:
#comandos
elif exp:
#comandos
else:
#comandos
34. 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.
35. 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”
36. Estruturas de Repetição
for var in seq:
#comandos
for num in range(200):
print num
while exp:
#comandos
from time import time
start = time ()
while time () - start < 3.0:
print “ esperando ... “
37. 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 elemento
else :
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”.
38. 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”.
39. 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)
40. 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
41. 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 )
42. 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 )
43. Módulos
Módulos são funções definidas em arquivos separados
Itens são importados utilizando from ou import
from module import function
function()
import module
module.function()
Módulos são “namespaces”
Podem ser utlizados para organizar nomes de variáveis.
mod1.umValor = mod1.umValor - mod2.umValor
44. 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_instacia
print A.atributo1
45. Classes
import datetime
class Pessoa ( object ):
def __init__ ( self , nome , nascimento ):
self . nome = nome
self . nascimento = nascimento
def idade ( self ):
delta = datetime . date . today () - self . nascimento
return delta . days / 365
def __str__ ( self ):
return ’%s , % d anos ’ % ( self .nome , self . idade () )
46. 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...
48. 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.
49. Classes
Propriedade
Escrita e leitura dos atributos
class C( object ):
def __init__ ( self ):
self . __x = None
def getX ( self ):
return self . __x
def setX ( self , valor ):
if isinstance ( valor , int ):
self . __x = valor
else :
raise TypeError ( “x precisa ser inteiro !” )
x = property ( getX , setX )
c = C()
c.x = 1
c.x = ’abc ’ # TypeError : x precisa ser inteiro
print c.x
52. 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 bytes
arquivo.close ()
53. 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 == “”:
break
print linha
55. 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