540 likes | 812 Views
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
E N D
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
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? • 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…
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)
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
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
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 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
Exercícios - 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.
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
Exercícios - 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.
Estruturas de Repetição while exp: #comandos from time import time start = time () while time () - start < 3.0: print“ esperando ... “ for var in seq: #comandos for num in range(200): print num
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”.
Exercícios - 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): printself.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 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 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 ): returnself . __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
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!