Mara Nascimento (mcn2) Agenda O que Python Por que usar python Histria Quem usa Python Caractersticas A Liguagem O que Python Python Linguagem de alto nvel Orientada a Objetos Interpretada No apenas uma linguagem de script Fcil de usar e de aprender Por que usar Python Por que usar Python? Conceitos fundamentais simples Sintaxe clara muito prxima de um pseudo-cdigo Cdigo curto e legvel Tipos pr-definidos poderosos Possui um vasto repertrio de bibliotecas Ciclo de desenvolvimento rpido
Por que usar Python? Licena Open Source Pouco punitiva: poucas regras arbitrrias; Extensvel (adicionar novos mdulos) C/C++ Java (atravs Jython) Extremamente portvel Unix/Linux, Windows, Mac, PalmOS, WindowsCE, RiscOS, VxWorks, QNX, OS/2, OS/390, AS/400, PlayStation, Sharp Zaurus, BeOS, VMS
Histria Breve Histria Criada por Guido van Rossum em 1989 no Centrum voor Wiskunde en Informatica (CWI), em Amsterd,Holanda. Linguagem de scripts para o sistema operacional distribudo Amoeba Baseada na linguagem ABC, desenvolvida no CWI por Guido e outros nas dcadas de 70 e 80. O nome Python teve origem no grupo humorstico britnico Monty Python. Verses 26 de janeiro de 1994 verso 1.0 1998 JPython 16 de outubro de 2000 verso 2.0 19 de setembro de 2006 verso 2.5 (atual) Quem usa Python No Mundo NASA (vrios 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 compilao de aplicativos (build system). Sistema de empacotamento e entrega de dados (packaging system). Sistema de monitoramento e manuteno do cluster Sistema de testes No Brasil Jornal do Brasil, AOL Brasil Embratel: monitoramento das interfaces de backbone e clientes de internet, tambm existem scripts de uso interno. CPqD: monitoramento de centrais telefnicas. Conectiva: Gerenciamento de pacotes da distribuio Linux e ferramentas de uso interno. Async: desenvolvimento de software de automao comercial
Caractersticas Compilada X Interpretada Interpretada Interpretador interativo Compilador de byte code compilao implcita e automtica
Paradigma Orientada a Objetos Suporte a outros paradigmas Estrutural Funcional Fcil integrao com outras linguagens
Sistema de Tipos Fortemente tipada Objetos no podem mudar de tipo No h converso automtica de tipos Tipagem dinmica No h declarao de variveis
Outras Poderosas estruturas de dados nativas Listas Dicionrios Identao para estrutura de bloco Blocos demarcados por espaos
print "O valor de a " if a == 0: print "zero" else: print a
A Linguagem Comentrios e Comentrios Funcionais Aps o caractere # at o final da linha, tudo considerado um comentrio e ignorado, exceto pelos comentrios funcionais.
Definindo a codificao do arquivo fonte # coding: <encodingname>
Em sistemas Posix pode-se usar o comentrio funcional #!/usr/bin/env python para executar o arquivo com o comando python encontrado no ambiente. Isto no caracterstico de Python, mas dos sistemas Posix.
Indentao Em Python, os blocos de cdigo so delimitados pelo uso de indentao. A indentao no precisa ser consistente em todo o arquivo, s no bloco de cdigo. Uma boa prtica ser consistente no projeto todo. Cuidado ao misturar TAB e Espaos: configure seu editor!
Variveis Tipagem dinmica uma varivel no tem tipo fixo, ela tem o tipo do objeto que ela contm. No precisam ser declaradas Variveis so criadas quando atribudas pela primeira vez Variveis devem ser atribudas antes de serem referenciadas Tudo uma varivel Funes, classes, mdulos ... Tipos de Dados Variveis Numricas Imutveis
num_int = 13 num_int_long = 13L num_real = 13.0
Tipos de Dados Strings Imutveis Criao 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 Mtodos: split, count, index, join, lower, upper, replace
Tipos de Dados Tuplas Formadas por elementos de qualquer tipo Delimitadas por parnteses. ( e ) Imutveis no se pode acrescentar apagar ou modificar valores Vantagem: eficiente Tipos de Dados Listas Formadas por elementos de qualquer tipo Criao lista = [ 10 , 2 , 3 , texto , 20 ] Acesso a elementos pelo ndice print lista [ 2 ] # imprime 3
Principais Mtodos: append, count, index, insert, pop, remove,reverse, sort
Listas Dado uma lista lista, verifique se valor est dentro dela, caso verdade imprima Sim, seno imprima No. 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 posio est rotacionada em 3 posieses, isto , indice0 = indice + 3.
Tipos de Dados Dicionrios Formados por pares de chave-valor Delimitados por chaves. { e } d = { chave : valor , linguagem : python }
Chave sempre um valor Imutvel! lista = [ 1 , 2 ] d[ lista ] = outro valor #TypeError: list object are unhashable
Tipos de Dados Dicionrios Principais Mtodos: 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 Dicionrios Crie um dicionrio d e coloque nele seus dados: nome, idade, telefone,endereo. Usando o dicionrio d criado anteriormente, imprima seu nome. Tambm usando d, imprima todos os itens do dicionrio 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 so considerados falsos: None False Valor 0 de virios tipos: 0, 0.0, 0L, 0j Seqncias vazias: , (), [] Mapeamentos vazios Instncias de objetos que definam __nonzero__() que retorne valor False ou 0 Instncia 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 Seno, Caso a for falso e b for verdadeiro, imprima Caso 2 Caso contrrio: 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 Seno imprima Caso 5
Estruturas de Repetio 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 ... Estruturas de Repetio Python fornece a clusula else para os laos. Ser executada quando a condio do lao for falsa.
for elemento in lista : if elemento == parada : break print elemento else : print " Lao chegou ao fim
No exemplo acima, a mensagem Lao chegou ao fim s imprimida caso no existir um elemento que seja igual a parada. Estrutura de Repetio Dada uma lista de palavras lista e uma palavra chave imprima o ndice do elemento que encontrou a palavra, seno imprima Palavra No Encontrada.
Funes Regra LGB Referncias buscam 3 escopos: local, global, built-in Atribuies criam ou modificam nomes locais por default Pode forar argumentos a serem globais utilizando global Exemplo
x = 99 def func(y): z = x+y #x no atribudo ento global return z func(1) Funes possvel definir argumentos defaults que no 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 Funes Nmero varivel de argumentos argumentos so passados para a funo na forma de uma lista
def arg_sem_nome ( * args ): for arg in args : print " arg :" , arg
arg_sem_nome ( a , b , 123 ) Funes Nmero varivel de argumentos argumentos so passados para a funo na forma de um dicionrio, 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 )
Mdulos Mdulos so funes definidas em arquivos separados Itens so importados utilizando from ou import from module import function function()
import module module.function() Mdulos so namespaces Podem ser utlizados para organizar nomes de variveis.
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 So atributos que esto na classe, no na instncia So compartilhados entre todas as instncias (economia de memria) Os valores so instanciados/atribudos ao ler a definio de classe teis para casos como Jogos, onde uma imagem deve ser compartilhada por todos os personagens idnticos, economizando memria teis para fazer lock em regies crticas, evitar condies 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 Pblicos e Privados Nomenclatura define atributos/mtodos pblicos e privados Privados: nomes que se iniciam com __ e no terminam com __. Pblicos: os outros nomes possveis. Convenciona-se que atributos/mtodos que se iniciam e terminam com __ (portanto pblicos) so 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 # TypeError : x precisa ser inteiro print c.x Excees try: algumaCoisa() except: print Erro else: # Ser executado se quando no houver exceo outraCoisa()
Excees try: algumaCoisa() finally: # Ser executado sempre! (com ou sem exceo) outraCoisa()
# Podemos usar except ou finally, nunca os dois!
Arquivos Lendo todo o contedo para a memria: arquivo = open ( nome_arq.txt ) conteudo = arquivo.read () arquivo.close ()
Lendo todas as linhas para a memria (lista): arquivo = open ( nome_arq.txt ) linhas = arquivo.readlines () arquivo.close ()
Lendo uma quantidade especfica de bytes: arquivo = open ( nome_arq.txt ) comeco = arquivo.read ( 20 ) # 20 primeiros bytes arquivo.close ()
Arquivos Lendo com laos: arquivo = open ( nome_arq.txt ) # idntico a arquivo.readlines() for linha in arquivo : print linha
arquivo = open ( nome_arq.txt ) while True : linha = arquivo.readline () if linha == : break print linha
Exerccio Contador de Palavras Pedir Arquivo Ler Arquivo Contar quantas vezes aparece cada palavra Listar as palavras em ordem alfabtica, junto com o seu nmero de repeties no texto
Referncias 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