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

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
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

 Estrutural
 Funcional

Fácil integração com outras linguagens
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
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áveis
 Criaçã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

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
Tipos de Dados

Listas
 Formadas por elementos de qualquer
 Criação
 lista = [ 10 , 2 , 3 , ’texto’ , 20 ]
 Acesso a elementos pelo índice
 print lista [ 2 ] # imprime ’3 ’
 Principais
tipo
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,
 Seqüências vazias: ”, (), []
 Mapeamentos vazios
 Instâncias de objetos que
0L, 0j
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
while exp:
#comandos
for num in range(200):
print num
from time import time
start = 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 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”.
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 = 99
def func(y):
z = x+y #x não é atribuído então é global
return 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 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
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
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 () )
Classes

Atributos de Classe
 São
 São
atributos que estão na classe, não na instância
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 classes
class 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 = 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 ’
print c.x
# TypeError : x precisa ser inteiro
Exceções
try:
algumaCoisa()
except:
print ‘Erro’
else:
# Será executado se quando não houver exceção
outraCoisa()
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 bytes
arquivo.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 == “”:
break
print 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
Download

Python - Centro de Informática da UFPE