Introdução a python
-
Upload
ben-hur-nascimento -
Category
Documents
-
view
683 -
download
0
Transcript of Introdução a python
Introdução a linguagem Python 2.7 Universidade Federal de Lavras
Departamento de Ciência da Computação
Ben Hur Bahia do Nascimento
Sobre os slides
• Esse slide foi feito por Ben Hur Bahia do Nascimento {bh [ at ] comp.ufla.br}, baseado nas obras citadas como bibliografia no fim do arquivo e pode ser distribuído gratuitamente, sob a licença:
• Licença Creative Commons Atribuição-Uso Não-Comercial-compartilhamento pela mesma Licença 2.5 Brasil. Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-nc-sa/2.5/br/ ou envie uma carta para Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.
Python: Criador e Origem
• A linguagem foi criada por Guido von Russom.
• O nome Python teve a sua origem no grupo humorístico britânico Monty Python criador do programa Monty Python's Flying Circus, embora muitas pessoas façam associação com o réptil do mesmo nome (em português, píton ou pitão).
O que é Python?
● É uma linguagem de programação de altíssimo nível
● Suporte nativo a estruturas de dados de alto nível
● Interpretada (compilável também)
● Imperativa
● Multiparadigma
● Orientada a objetos, Procedural e Funcional
● Possui tipagem dinâmica e forte
● Possui Garbage Colector (Gerenciador de Memória)
● A linguagem é Case Sensitive
● Interage com outras linguagens
● IronPython (.NET), Jython(Java), C e C++
Por que usar Python?
• Sintaxe limpa, concisa e de fácil leitura
• Mais com menos código
• Fácil aprendizado
• Forte suporte da comunidade
• Documentação extensa
• Biblioteca padrão enorme
Quem usa Python?
• NASA
• Nokia
• Gimp/Inkscape/Blender
• Governo (brasil.gov.br)
• Portal G1(g1.globo.br)
• É utilizada em vários processos no Linux.
http://www.python.org.br/wiki/EmpresasPython
http://www.python.org/about/success/
Modo interativo
● É chamar o interpretador e executar código em tempo real.
● Salve o arquivo com extensão *.py, entre no terminal e vá na pasta do arquivo e digite “python <nome do arquivo>.py”
dir() e help()
• Os comandos mais úteis, pois facilitam a descoberta das funcionalidades das funções e métodos para objetos.
• dir(objeto)
– Retorna uma lista de atributos e métodos do objeto
• print help(objeto)
– Mostra a documentação do objeto
Tipos-classe
• Tipos e classes, em Python, são unificados. • Não há declaração de tipo, mas uma inferência de
tipo.
• type() retorna o tipo da variável. • Os tipos possuem métodos próprios. • As variáveis podem mudar de tipo em tempo de
execução. • Existem: inteiro, inteiro longo, ponto flutuante, string,
booleano, octal e hexadecimal.
Tipos-classe: Números
● variável = algum valor
>>> really_long = 99999999999999999999 #20 9s
>>> type(really_long)
<type 'long'>
>>> a = 1
>>> type(a)
<type 'int'>
>>> a = 'texto'
>>> b = "texto"
>>> type(a)
<type 'str'>
>>> type(b)
<type 'str'>
>>> a = True
>>> b = False
>>> type(a)
<type 'bool'>
>>> type(b)
<type 'bool'>
Tentem usar dir(a) e help(a)
Conversões básicas de tipo
• int(), float(), str(), bool(), long()
>>> int(2.71)
2
>>> float(5)
5.0 >>> str(255)
'255'
>>> bool(1)
True
>>> bool(0)
False
>>> bool(43)
True
>>> bool('')
False
>>> bool(„sou verdadadeiro')
True
>>> str(True)
'True'
>>> float(233333333333337777777777778888888888999999999999933334421L)
2.3333333333333778e+56
>>> long(2.56)
2L
Testem no interpretador!
Tipos-classe: Operadores Aritméticos
• Padrões: + - * /
• Divisão inteira: a / b -> sendo a E b inteiros.
• Divisão inteira: a // b -> sendo a OU b float
• Divisão float: a / b -> sendo a OU b float
• Exponenciação: base ** exp
• Módulo: a % b -> resto da divisão de a por b
Tipos-classe: Strings
Strings: strings padrões são imutáveis: banda1 = „Led Zeppelin‟ #String simples
banda2 = “ „Rachmaninov‟ ” #String simples
linhas=“””Essa e uma string
em multiplas linhas.”””
>>> print linhas
Essa e uma string
em multiplas linhas
Tipos-classe: Strings -> Operações
• +(concatenação) e *(multiplicação)
>>> banda = „Arctic‟
>>> banda + ‟ Monkeys!‟
„Arctic Monkeys!‟
>>> banda * 3
„ArcticArcticArctic‟
Tipos-classe: Strings -> Métodos
• Utilizando os métodos replace(),strip() faça:
• Troque onde houver cachorro por macaco e vice-versa:
animais=„Os macacos vivem coçando as costas. Se fosse
um cachorro, morderia.‟
• Traduza essa mensagem: msg=‟02 42tr0n4ut42 ch3g4r4m.‟
Tipos-classe: Strings
• Operador “%” é usado para fazer interpolação de strings.
• A interpolação é mais eficiente no uso de memória do que a concatenação convencional.
>>> qtdDinheiros = 23
>>> print „Eu tenho %d dinheiros!‟ % qtdDinheiros
Eu tenho 23 dinheiros!
>>> print „Eu tenho %x hexas!‟ % qtdDinheiros
Eu tenho 17 hexas!
>>> print „Eu tenho %o octais!‟ % qtdDinheiros
Eu tenho 27 octais!
Tipos-classe: Strings mutáveis
• Strings da classe UserString são mutáveis:
from UserString import MutableString
>>> a = MutableString( „Pascal =)‟ )
>>> print a
Pascal =)
>>> a[-1] = „(‟
>>> print a
Pascal =(
Tipos-classe: Strings
• Símbolos usados na interpolação:
• %s: string.
• %d: inteiro.
• %o: octal.
• %x: hexadecimal.
• %f: real.
• %e: real exponencial.
• %%: sinal de percentagem.
Tipos-classe: Listas
Lista: são coleções heterogêneas de objetos, que podem ser de qualquer tipo, inclusive outras listas. Sintaxe: <variável> = [] L = [ „Douglas Adams‟, ”‟oi‟”, [3.14,2.71],1]
São mutáveis, podendo ser alteradas a qualquer momento. Listas podem ser fatiadas da mesma forma que as strings, mas como as listas são mutáveis, é possível fazer atribuições a itens da lista.
Tipos-classe: Listas -> Métodos
Alguns métodos/operações em listas: >>> lista = [“Anem”]
>>> lista.append(1.9)
>>> lista
[“Anem”, 1.9]
>>> lista.remove(“Anem”)
>>> lista
[1.9]
>>> lista.append(0.7)
>>> lista.append(58)
>>> lista
[1.9, 0.7, 58]
>>> lista.sort()
>>> lista
[0.7, 1.9, 58]
>>> lista.reverse() >>>
lista
[58, 1.9, 0.7]
>>> lista[1:]
[1.9, 0.7]
Tipos-classe: Listas -> Métodos
Alguns métodos/operações em listas:
>>> lista.pop() #Implementa filas e pilhas
0.7
>>> lista
[58, 1.9]
>>> lista.pop(0) #índice
58
>>> lista = [1,2,3]
>>> lista.insert(1,„intruso‟) # posição específica
>>> lista
[1, ‟intruso‟, 2, 3]
Tipos-classe: Tuplas
Semelhantes as listas, porém são imutáveis: não se pode acrescentar, apagar ou fazer atribuições aos itens. Utilidade: aloca memória de forma contínua, melhorando desempenho. Indicado para utilização matemática. Sintaxe: <variável> = () tuplita = (142857,‟Chico Buarque‟,u”Richard Dawkins”)
tupra = 'Michael Jackson', "Howlin' Wolf", 'John Coltrane'
● A função list() transforma uma tupla em lista ● A função tuple() transforma uma lista em tupla
Tipos-classe: Tuplas -> Métodos
●alguns métodos: ●count() : conta quantos itens existe do valor passado como paramêtro(serve para lista também): a = 1,1,3,3,4
a.count(1)
>> 2
●index() : retorna a primeira posição que o valor passado como paramentro aparece. a.index(3)
>>2
Tipos-classe: Dicionários
• Um dicionário é uma lista de associações compostas por uma chave única e estruturas correspondentes. Dicionários são mutáveis, tais como as listas.
• A chave precisa ser de um tipo imutável, geralmente são usadas strings, mas também podem ser tuplas ou tipos numéricos. Já os itens dos dicionários podem ser tanto mutáveis quanto imutáveis. O dicionário do Python não fornece garantia de que as chaves estarão ordenadas.
Tipos-classe: Dicionários -> Métodos • Exemplo de dicionário: >>> dic = {„pi‟: 3.1415, 42: “Douglas Adams”}
>>> dic[„pi‟]
3.1415
>>> dic[42]
„Douglas Adams‟
>>> dic[„python‟] = „massa!‟
>>> dic[„python‟]
„massa‟
>>> # se a chave não existir, retorna booleano False
>>> dic.pop(„pi‟,False)
3.1415
>>> dic.pop(„pi‟,False)
False
>>> for chave,valor in dic.iteritems():
... print chave,‟=>‟,valor
python => massa!
42 => Douglas Adams
Tipos-classe: Dicionários -> Métodos
>>> dic.get(42,‟Caso não existir retorne essa string‟)
„Douglas Adams‟
>>> dic[42]
„Douglas Adams‟
>>> dic.items()
[(„python‟,‟massa‟), (42, „Douglas Adams‟)]
>>> dic.keys()
[„python‟,42]
>>> dic.values()
[„massa‟, „Douglas Adams‟]
>>> dic.has_key(„python‟)
True
>>> dic.clear()
>>> dic
{}
Tipos-classe: Booleanos
• Em Python existe as palavras reservadas True e False para tipo booleano.
• Porém, muitas coisas em Python são considerados booleanos
• bool() : verifica se a variável é verdadeira ou falsa:
• Qualquer valor diferente de zeros e vazios é considerado verdadeiro.
Tipos-classe: Booleanos
>>> bool(0)
False
>>> bool(0.0)
False
>>> bool(„‟)
False
>>> bool(“”)
False
>>> bool([])
False
>>> bool(())
False
>>> bool({})
False
Todo o resto é considerado verdadeiro, True
Tipos-classe: Booleanos -> Operadores Booleanos
• and,or,not,is e in
>>> True and True
True
>>> True or False
True
>>> 4 in [1,4]
True
>>> a=1; b=a
>>> a is b
True
>>> 1 or False
1
>>> 0 or False
False
>>> not True
False
>>> not 1
False
Tipos-classe: Booleanos -> Operadores Relacionais
• >, <, >=, <=, ==, !=, <>
• != e <> significam “diferente”
• É possível usar vários operadores na relação:
>>> 1<2<=3<4<5>4>3>=2!=1
True
• all(): retorna True se todos itens passados forem verdadeiros.
• any(): retorna True se algum item for verdadeiro.
>>> 2>3
False
>>> 3>=3
True
>>> 4<=3
False
>>> x=3
>>> 2<x<4
True
>>> all(1,5.5)
True
>>> any(0,1)
True
Sintaxe: Blocos
● O uso de barra invertida (\) e vírgula (,) permitem continuar um código em outras linhas.
● Para comentários: #. E a linha será ignorada, com exceção de comentários funcionais.
● Dois pontos (:) delimitam blocos.
● Em Python, os blocos de código são delimitados pelo uso de endentação.
Sintaxe: Codificação
• Para alterar a codificação do arquivo fonte do programa acrescenta-se um comentário funcional no inicio do código:
• No inicio do arquivo, no qual <encoding> é a codificação do arquivo (geralmente latin1 ou utf-8).
Funções
• No Python, as funções: • Podem retornar ou não objetos. • Aceitam Doc Strings. • Aceitam parâmetros opcionais (com defaults). Se não
for passado o parâmetro será igual ao default definido na função.
• Aceitam que os parâmetros sejam passados com nome. Neste caso, a ordem em que os parâmetros foram passados não importa.
• Tem namespace próprio (escopo local), e por isso podem ofuscar definições de escopo global.
Funções • Sintaxe: def <nome da função> (<paramêtros>):
Ex.:
#escrevam isso em um arquivo!
Saída:
1024
6.543216468462249
Funcao de exponenciacao.
Escopo das variáveis
• Para declarar, dentro de algum escopo, uma variavel global, usa-se o comando global:
Saída:
oi
none
oie
Controle de fluxo: if, elif e else ● Se o bloco de código for composto de apenas uma
linha, ele pode ser escrito após os dois pontos.
Saída:
>:D
mim feliz
Laços de Repetição: for
● for: É a estrutura de repetição mais usada no Python. A instrução aceita não só sequências estáticas, mas também sequências geradas por iteradores.
sintaxe: for <variavel> in <estrutura iterável>:
● Iteradores são estruturas que permitem iterações, ou seja, acesso aos itens de uma coleção de elementos, de forma sequencial
● Break, continue e else permitidos.
Laços de Repetição: for
Saída:
>>1 => Sócrates
>>2 => Aristóteles
>>3 => Platão
>>4 => Descartes
>>5 => Nietzsche
Laços de repetição: while
● While: O laço while é adequado quando não há como determinar quantas iterações vão ocorrer e não há uma sequência a seguir.
Entrada e saida de dados
• O comando print escreve na saída padrão do Python.
• A entrada padrão se dá pela função raw_input(), que lê a entrada pelo teclado e retorna a string.
• O uso combinado de float() e int() permite a leitura de valores inteiros e pontos flutuantes.
Manipulação de arquivos
• Função Open(„endereco‟,‟<modo>‟)
• Sendo os modos:
– r: somente leitura (padrão)
– w: escrita
– a: escrita adição
– b: binario
• operador + permite leitura e gravação.
Manipulação de arquivos: métodos
• <objeto-arquivo>.readlines(): retorna uma lista com cada linha do arquivo.
• <objeto-arquivo>.mode(): retorna o modo atual do arquivo
• <objeto-arquivo>.write(): escreve no arquivo
• <objeto-arquivo>.close(): fecha o objeto
Módulo: math import math
>>> math.trunc(5.6) #arredonda valor para baixo.
5
>>> math.log(math.e): #retorna o logaritmo do numero
1.0
>>> math.log(1024,2) # log de 1024 na base 2
10.0
>>> math.factorial(5) #retorna o fatorial do numero dado.
120
>>> math.fabs(-5) #módulo de algum valor
5.0
>>> math.pi: #constante Pi
3.141592653689793
>>> math.e: #número de Euler
2.718281828459045
Orientação a Objetos
• Objetos são abstrações computacionais que representam entidades, com suas qualidades (atributos) e ações (métodos) que estas podem realizar.
• A classe é a estrutura básica do paradigma de orientação a objetos, que representa o tipo do objeto, um modelo a partir do qual os objetos serão criados.
Orientação a Objetos:
• Os atributos são estruturas de dados que armazenam informações sobre o objeto e os métodos são funções associadas ao objeto, que descrevem como o objeto se comporta.
• Sintaxe:
Orientação a Objetos:
• O interpretador Python possui um recurso chamado coletor de lixo (Garbage Collector) que limpa da memória objetos sem referências.
• método __init__() inicializa os valores do parâmetros
• método __repr__() é uma representação do objeto como string
Código-fonte = módulo?
Ao fazermos a verificação do namespace __name__ como sendo o __main__, verificamos se estamos rodando o arquivo fonte ou se estamos apenas importando-o
Código-fonte = módulo?
Todos arquivos *.py são tanto código-fonte quanto um módulo.
Rodando o arquivo
Do módulo pessoa.py, importe Pessoa. Nesse caso, não rodará o “main” do arquivo pessoa.py, pois estamos no namespace do interpretador
Orientação a Objetos: Serialização
• É basicamente você salvar um objeto em um arquivo.
• Como tudo em Python é objeto, você pode salvar qualquer coisa com serialização.
• Pode por exemplo salvar uma lista, com o que tiver nela. Depois é só recarregar esse objeto lista em uma lista nova e continuar usando-a.
• Existem frameworks em Python de terceiros que oferecem formas de persistência com recursos mais avançados.
Orientação a Objetos: Serialização
• Importe o modulo pickle
para salvar o objeto, sintaxe: pickle.dump(<objeto>,file(„<nomeArquivo>‟,‟w‟))
para reabrir o objeto: a = pickle.load(file(„<nomeArquivo>‟))
Funções Lambda (Programação Funcional)
• Programação funcional é um paradigma que trata a computação como uma avaliação de funções matemáticas.
• No Python, lambda é uma função anônima composta apenas por expressões.
• As funções lambda podem ter apenas uma linha, e podem ser atribuídas a uma variável.
Funções Lambda (Programação Funcional)
sintaxe: <funcao> = lambda <lista de variáveis>: <expressões >
Tratamento de Exceções
• Quando ocorre uma falha no programa (como uma divisão por zero, por exemplo) em tempo de execução, uma exceção é gerada. Se a exceção não for tratada, ela será propagada através das chamadas de função até o módulo principal do programa, interrompendo a execução
Tratamento de Exceções
print 1/0
>>>Traceback (most recent call last):
File "<input>", line 1, in ?
ZeroDivisionError: integer division or modulo by zero
Tratamento de Exceções
try:
print 1/0
except ZeroDivisionError:
print 'Erro ao tentar dividir por zero.‘
>>>Erro ao tentar dividir por zero.
Biblioteca padrão • É comum dizer que o Python vem com “baterias
inclusas”, em referência a vasta biblioteca de módulos e pacotes que é distribuída com o interpretador.
• Alguns módulos importantes da biblioteca padrão: • Matemática: math, cmath, decimal e random. • Sistema: os, glob, shutils e subprocess. • Threads: threading. • Persistência: pickle e cPickle. • XML: xml.dom, xml.sax e elementTree (a partir da
versão 2.5). • Configuração: ConfigParser e optparse. • Tempo: time e datetime. • Outros: sys, logging, traceback, types e timeit.
Bibliografia
• Python para Desenvolvedores,Luiz Eduardo Borges, 2ª edição, 360 pag., Edição do Autor, Rio de Janeiro, 2010, http://ark4n.wordpress.com/python/
• How to Think like a Computer Scientist: Learning with Python, Allen Downey, Jeffrey Elkner & Chris Meyers, 2nd Edition, 280 pag., Editado por Shannon Turlington & Lisa Cutler, Wellesley, MA, 2008