Introdução a python

69
Introdução a linguagem Python 2.7 Universidade Federal de Lavras Departamento de Ciência da Computação Ben Hur Bahia do Nascimento

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?

• Google

• 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/

Interpretação e Compilação

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

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

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.

Funções

• permite passagem de parâmetro por nome:

Saída:

#00ff00

#00ff00

#00ff00

Escopo das variáveis

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: Classe

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

Orientação a Objetos: Definindo uma classe

Orientação a Objetos: Definindo uma classe

Privatizando variáveis de instância.

Orientação a Objetos: Definindo uma classe

Dentro da classe

Fora da classe

Saída:

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: Herança

Dentro da classe

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

“The Zen of Python” por Tim Peters

• digite no Python: >> import this

ps: in english.