1 / 58

Python e Django – Programação de Alto Nível

Python e Django – Programação de Alto Nível. Danilo Borges da Silva d aniloborges_@hotmail.com. Porquê Python ?. Simples o suficiente para um curso introdutório Muitos recursos Orientação a Objetos Escalável (módulos, classes, controle de exceções)

hali
Download Presentation

Python e Django – Programação de Alto Nível

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Python e Django – Programação de Alto Nível Danilo Borges da Silva daniloborges_@hotmail.com

  2. Porquê Python? • Simples o suficiente para um curso introdutório • Muitos recursos • Orientação a Objetos Escalável (módulos, classes, controle de exceções) Biblioteca embutida extensa e grande número de módulos fornecidos por terceiros • Grande variedade de aplicações • Linguagem interpretada (script) • Multi-plataforma • Gratuito • Comunidade bastante desenvolvida

  3. Python: Tipos Básicos

  4. Tipos de Dados • São categorias de valores que são processados de forma semelhante • Por exemplo, números inteiros são processados de forma diferente dos números de ponto flutuante (decimais) e dos números complexos • Tipos primitivos: são aqueles já embutidos no núcleo da linguagem • Simples: numéricos (int, long, float, complex) e cadeias de caracteres (strings) • Compostos: listas, dicionários, tuplas e conjuntos • Tipos definidos pelo usuário: são correspondentes a classes (orientação objeto)

  5. Variáveis • São áreas de memória reservadas para armazenamentos de dados • Os nomes de variáveis são identificadores: • Nomes podem ser compostos de algarismos (0-9), letras (a-z ou A-Z) ou sublinhado ( _ ) • O primeiro caractere não pode ser um algarismo • Não Palavras reservadas (if, while, etc) são proibidas • Servem para: • Guardar valores intermediários • Construir estruturas de dados • Uma variável é modificada usando o comando de atribuição: • Var = expressão • É possível também atribuir a várias variáveis simultaneamente: • var1,var2,...,varN = expr1,expr2,...,exprN

  6. Variáveis • Variáveis são criadas dinamicamente e destruídas quando não mais necessárias, por exemplo, quando saem fora de escopo (veremos isso mais tarde) • O tipo de uma variável muda conforme o valor atribuído, i.e., int, float, string, etc.

  7. Números • Há vários tipos numéricos que se pode usar em python: • Int: números inteiros de precisão fixa 1 , 2 , 15 , -19 • Long: números inteiros de precisão arbitrária 1L , 10000L , -9999999L • Floats: números racionais de precisão variável 1.0 , 10.5 , -19000.00005 , 15e-5 • Complex: números complexos 1+1j , 20j , 1000+100J

  8. Strings • São cadeias de caracteres • Constituem outro tipo fundamental do python • Constantes string são escritas usando aspas simples ou duplas Ex.: "a" ou 'a‘ • O operador “+” pode ser usado para concatenar strings Ex.: "a"+"b" é o mesmo que "ab" • O operador “*” pode ser usado para repetir strings Ex.: "a"*10 é o mesmo que "aaaaaaaaaa"

  9. Strings • Python usa a tabela de caracteres default do S.O. Ex.: ASCII, UTF-8 • Caracteres não imprimíveis podem ser expressos usando notação “barra-invertida” (\) \n é o mesmo que newline \r é o mesmo que carriagereturn \t é o mesmo que tab \b é o mesmo que backspace \\ é o mesmo que \ \x41 é o mesmo que o caractere cujo código hexadecimal é 41 (“A” maiúsculo)

  10. Strings • A notação barra-invertida (\) pode ser desabilitada desde que a constante string seja precedida por um r (erre minúsculo) • São chamadas strings raw (cruas) • Também é possível escrever constantes string em várias linhas incluindo as quebras de linha usando três aspas como delimitadores

  11. Strings – Fatias (slices) • Notação para separar trechos de uma string • Notação: string[índice1:índice2] • Retorna os caracteres desde o de índice1 (inclusive) até o de índice2 (exclusive) • Se o primeiro índice é omitido, é assumido 0 • Se o último índice é omitido, é assumido o fim da string

  12. Expressões Booleanas • Também chamadas expressões lógicas • Resultam em verdadeiro (True) ou falso (False) • São usadas em comandos condicionais e de repetição • Servem para analisar o estado de uma computação e permitir escolher o próximo passo • Operadores mais usados • Relacionais: > , < , ==, !=, >=, <= • Booleanos: and, or, not • Avaliação feita em “Curto-circuito” • Expressão avaliada da esquerda para a direita • Se o resultado (verdadeiro ou falso) puder ser determinado sem avaliar o restante, este é retornado imediatamente

  13. Expressões Booleanas • As constantes True e False são apenas símbolos convenientes • Qualquer valor não nulo é visto como verdadeiro enquanto que 0 (ou False) é visto como falso • O operador or retorna o primeiro operando se for vista como verdadeiro, caso contrário retorna o segundo • O operador and retorna o primeiro operando se for vista como falso, caso contrário retorna o segundo • Operadores relacionais são avaliados antes de not, que é avaliado antes de and, que é avaliado antes de or

  14. Funções Embutidas • Além dos operadores, é possível usar funções para computar valores • As funções podem ser definidas: • Pelo programador • Em módulos da biblioteca padrão • Por default: são as funções embutidas (built-in) • Na verdade, fazem parte do módulo __builtins__, que é sempre importado em toda aplicação

  15. Importando Módulos • Muitas funções importantes são disponibilizadas em módulos da biblioteca padrão • Ex.: o módulo math tem funções como sin, cos, exp e outras • Um módulo pode conter não só funções mas também variáveis ou classes • Por exemplo, o módulo math define a constante pi • Para usar os elementos de um módulo, pode-se usar o comando import • Formatos: • import modulo • from modulo import nome,...,nome • from modulo import *

  16. Python: Comandos Básicos

  17. Passos em programação • Comandos condicionais • Comandos de repetição • Definição e uso de procedimentos (subprogramas) • Definição e uso de classes e objetos (programação OO)

  18. Print • Forma geral: printexpr,expr,... • Os valores das expressões são escritos um após o outro sem pular de linha: >>> print "1.001 ao quadrado é ",1.001**2 1.001 ao quadrado é 1.002001 • Se o comando terminar com vírgula, o próximo print escreverá na mesma linha.

  19. Input • O programa que computa elementos da série de Fibonacci termina quando atinge um elemento com valor superior a uma constante • Podemos tornar o programa mais flexível se ao usuário for permitido estipular o valor máximo • O comando input permite perguntar ao usuário um valor (normalmente é atribuído a uma variável) • Formato: input(pergunta) • onde pergunta é uma string opcional que será exibida para indicar o valor que se espera (i.e., prompt)

  20. If • É o comando condicional por excelência • Formatos: • ifexpressao: comandos • ifexpressao: comandos1 else: comandos2 • if expressao1: comandos1 elif expressao2: comandos2 else: comandos(N)

  21. While • Repete uma seqüência de comandos enquanto uma dada expressão booleana é avaliada como verdadeira • Formato: while expressão: comando ... comando

  22. Python: Listas

  23. Estruturas de dados • Maneira de organizar dados de maneira a facilitar seu acesso • Algumas formas são clássicas: • Listas • Arrays (vetores e matrizes) • Tuplas (registros) • Árvores • Linguagens freqüentemente possuem primitivas para construção dessas E.D. • Estruturas de dados embutidas • Outras E.D. mais complexas podem ser construídas combinando as E.D. clássicas

  24. Listas • São arranjos seqüenciais de informações mais simples • Caracterizam-se por permitir o acesso eficiente aos seus elementos em ordem seqüencial • A definição clássica de uma lista como estrutura de dados abstrata compreende: • Operação de construção de uma lista vazia • Operação que testa se uma dada lista é vazia • Operação para obter o primeiro elemento de uma lista • Uma operação para adicionar um novo elemento no início de uma lista • Operação para retirar o elemento inicial de uma lista

  25. A função range • Retorna uma progressão aritmética de inteiros numa lista • Forma geral: range (início, parada, incremento) • início (opcional) é o primeiro valor a ser gerado (default: 0) • parada é o limite da progressão: a progressão termina no último valor antes de parada • incremento (opcional) é o passo da progressão (default:1)

  26. Comando for • Permite iterar sobre os elementos de uma lista • Forma geral: for var in lista : comandos • Os comandos são repetidos para cada valor de lista • Durante a repetição, var possui o valor corrente da lista • Uma grande utilidade da função range é construir a lista de iteração • Ex.: >>>for i in range(1,7): print i,

  27. Python: Tuplas e Strings

  28. Tuplas • São estruturas de dados parecidas com listas, mas com a particularidade de serem imutáveis • Tuplas são seqüências e, assim como listas, podem ser indexadas e fatiadas, mas não é possível modificá-las • Uma tupla vazia se escreve () • Os parênteses são opcionais se não provocarem ambigüidade • Uma tupla contendo apenas um elemento deve ser escrita com uma vírgula ao final

  29. Módulo String • Manipulação de strings é uma atividade freqüente em programas Python • Existe um módulo chamado string que contém uma grande quantidade de funcionalidades para trabalhar com strings • Para usá-las: • from string import * • Entretanto, strings pertencem à classe str e a maior parte do que existe no módulo string aparece como métodos da classe str

  30. Python: Dicionários

  31. Dicionários • São estruturas de dados que implementam mapeamentos • Um mapeamento é uma coleção de associações entre pares de valores • O primeiro elemento do par é chamado de chave e o outro de conteúdo • De certa forma, um mapeamento é uma generalização da idéia de acessar dados por índices, exceto que num mapeamento os índices (ou chaves) podem ser de qualquer tipo imutável

  32. Chaves vs. Índices • Considere que queiramos representar um caderno de telefones • Uma solução é ter uma lista de nomes e outra de telefones • Telefone de nome[i] armazenado em telefone[i] • Acrescentar “Joao” com telefone “20122232”: nome+= “Joao” telefone+=“20122232” • Para encontrar o telefone de “Joao”: Tel = telefone[nome.index[“Joao”]] • Dicionários tornam isso mais fácil e eficiente • telefone[“Joao”] = “20122232” • Tel = telefone[“Joao”]

  33. Criando dicionários • Uma constante do tipo dicionário é escrita { chave1:conteúdo1, ... chaveN:conteúdoN} • Uma variável do tipo dicionário pode ser “indexada” da maneira habitual, isto é, usando colchetes • O conteúdo associado a uma chave pode ser alterado atribuindo-se àquela posição do dicionário • Novos valores podem ser acrescentados a um dicionário fazendo atribuição a uma chave ainda não definida • Não há ordem definida entre os pares chave/conteúdo de um dicionário

  34. Método get • get(chave,valor) • Obtém o conteúdo de chave • Não causa erro caso chave não exista: retorna valor • Se valor não for especificado chaves inexistentes retornam None

  35. Métodos items, keys,values e pop • items() retorna uma lista com todos os pares chave/conteúdo do dicionário • keys() retorna uma lista com todas as chaves do dicionário • values() retorna uma lista com todos os valores do dicionário • pop (chave) • Obtém o valor correspondente a chave e remove o par chave/valor do dicionário

  36. Python: funções

  37. Abstração • É uma técnica de programação que nos permite pensar num problema em diversos níveis • A idéia é que quando estamos pensando num problema macroscopicamente, não estamos preocupado com minúcias • Dividir para conquistar: • Um problema é dividido em diversos sub-problemas • As soluções dos sub-problemas são combinadas numa solução do problema maior

  38. Definindo funções • Em Python, sub-programas têm o nome de funções • Formato geral: def nome (arg, arg, ... arg): comando . . . comando • Onde: • nome é o nome da função • args são especificações de argumentos da função • Uma função pode ter 0, 1 ou mais argumentos • comandos contêm as instruções a ser executadas quando a função é invocada

  39. Python: Classes

  40. Orientação a Objetos • É uma disciplina de programação assim como a Programação Estruturada • Tenta unificar as idéias de algoritmos e estruturas de dados através do conceito de Objeto • Um objeto é uma unidade de software que encapsula algoritmos e os dados sobre o qual os algoritmos atuam • Os seguintes conceitos são importantes quando falamos de orientação a objetos: • Polimorfismo • Abstração • Herança

  41. Polimorfismo • É o que permite que dois objetos diferentes possam ser usados de forma semelhante • Por exemplo, tanto listas quanto tuplas ou strings podem ser indexadas por um número entre colchetes e suportam o método len • Assim, se escrevemos ... for i in range(len(X)): print i, X[i] • ...não é possível saber de antemão se X é uma tupla, uma lista ou uma string • Desta forma, se escrevemos um algoritmo para ser aplicado um objeto X, então também pode ser aplicado a um objeto Y desde que Y seja suficientemente polimórfico a X

  42. Abstração ou Encapsulamento • É o que permite que um objeto seja utilizado sabendo-se sobre ele apenas a sua interface • Em particular, não precisamos conhecer a implementação dos seus métodos • Em OO a abstração tem mais alcance pois um objeto encapsula tanto dados como algoritmos • Assim, podemos atribuir objetos ou passar objetos como argumentos, sem necessariamente saber como o objeto está implementado

  43. Herança • É o que permite construir objetos que são especializações de outro objeto • Isso permite o reuso de software já que objetos especializados herdam dos objetos genéricos uma série de atributos comuns • Por exemplo, considere um objeto que representa uma forma geométrica. Então, ele pode ter características tais como área, perímetro, centróide, etc. • Um polígono é uma forma geométrica, • Portanto, herda todas as características de formas geométricas • Deve suportar também características específicas como número de lados e comprimento de arestas

  44. Declarando a Classe • A maneira mais simples é: class nome: var = valor ... var = valor defmetodo (self, ... arg): ... defmetodo (self, ... arg): ... • As variáveis e os métodos são escritos precedidos pelo nome da classe e por um ponto (.) • Assim, uma variavel v definida numa classe c é escrita c.v • Os métodos sempre têm self como primeiro argumento • self se refere a uma instância da classe • Uma nova instância da classe é criada usando nome ()

  45. Exemplo >>> class C: a = 2 b = 3 def f(self,x): return C.a*x+C.b >>> C.a = 9 9 >>> C.b 3 >>> obj=C() >>> obj.f(7) 17

  46. Atributos de instâncias • No exemplo anterior, a e b eram atributos da classe C e portanto usáveis por qualquer instância de C • Mais freqüentemente, precisamos de atributos associados a instâncias individuais • Um atributo attr associado a uma instância obj tem nome obj.attr • Se queremos nos referir a um atributo attr de um objeto dentro de algum de seus métodos, usamos o nome self.attr

  47. Exemplo >>> class C: definit(self,a=2,b=3): self.a = a self.b = b def f(self,x): returnself.a*x+self.b >>> obj1 = C() >>> obj1.init(2,3) >>> obj2 = C() >>> obj2.init(8,1) >>> obj1.f(7) 17 >>> obj2.f(7) 57

  48. Atributos herdados de classe • Se uma classe define atributos de classe, as instâncias herdam esses atributos da classe como atributos de instância • Ex.: >>> class C: a = 1 def f(self,x): self.a += x >>> c = C() >>> c.f(2) >>> c.a 3 >>> C.a 1

  49. Construtores • Um método como init do exemplo anterior é bastante útil para inicializar atributos da instância e é conhecido como construtor da classe • Na verdade, Python suporta construtores que podem ser chamados automaticamente na criação de instâncias • Basta definir na classe um método chamado __init__ • Este método é chamado automaticamente durante a criação de um nova instância da classe, sendo que os argumentos são passados entre parênteses após o nome da classe • Obs.: o método __init__ é apenas um exemplo de “método mágico” que é invocado de maneira não padrão (veremos outros adiante)

  50. Exemplo >>> class C: def __init__(self,a=2,b=3): self.a = a self.b = b def f(self,x): returnself.a*x+self.b >>> obj1 = C() >>> obj2 = C(8,1) >>> obj1.f(7) 17 >>> obj2. f(7) 57

More Related