Você está na página 1de 69

Introduo a linguagem Python 2.

7
Universidade Federal de Lavras Departamento de Cincia da Computao 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 distribudo gratuitamente, sob a licena:

Licena Creative Commons Atribuio-Uso NoComercial-compartilhamento pela mesma Licena 2.5 Brasil. Para ver uma cpia desta licena, visite http://creativecommons.org/licenses/by-ncsa/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 humorstico britnico Monty Python criador do programa Monty Python's Flying Circus, embora muitas pessoas faam associao com o rptil do mesmo nome (em portugus, pton ou pito).

O que Python?

uma linguagem de programao de altssimo nvel

Suporte nativo a estruturas de dados de alto nvel

Interpretada (compilvel tambm)


Imperativa Multiparadigma

Orientada a objetos, Procedural e Funcional

Possui tipagem dinmica e forte


Possui Garbage Colector (Gerenciador de Memria)

A linguagem Case Sensitive Interage com outras linguagens

IronPython (.NET), Jython(Java), C e C++

Por que usar Python?


Sintaxe limpa, concisa e de fcil leitura Mais com menos cdigo Fcil aprendizado Forte suporte da comunidade Documentao extensa Biblioteca padro enorme

Quem usa Python?


Google NASA Nokia Gimp/Inkscape/Blender Governo (brasil.gov.br) Portal G1(g1.globo.br) utilizada em vrios processos no Linux. http://www.python.org.br/wiki/EmpresasPython http://www.python.org/about/success/

Interpretao e Compilao

Modo interativo

chamar o interpretador e executar cdigo em tempo real. Salve o arquivo com extenso *.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 funes e mtodos para objetos. dir(objeto) Retorna uma lista de atributos e mtodos do objeto

print help(objeto) Mostra a documentao do objeto

Tipos-classe
Tipos e classes, em Python, so unificados. No h declarao de tipo, mas uma inferncia de tipo.

type() retorna o tipo da varivel. Os tipos possuem mtodos prprios. As variveis podem mudar de tipo em tempo de execuo. Existem: inteiro, inteiro longo, ponto flutuante, string, booleano, octal e hexadecimal.

Tipos-classe: Nmeros

varivel = algum valor


>>> really_long = 99999999999999999999 #20 9s >>> type(really_long) <type 'long'> >>> a = True >>> b = False >>> type(a) <type 'bool'> >>> type(b) <type 'bool'>

>>> a = 1 >>> type(a) <type 'int'>

Tentem usar dir(a) e help(a)

>>> a = 'texto' >>> b = "texto" >>> type(a) <type 'str'> >>> type(b) <type 'str'>

Converses bsicas de tipo


int(), float(), str(), bool(), long()
>>> int(2.71) 2 >>> bool(1) True >>> float(5) 5.0 >>> bool(0) False >>> str(255) '255' >>> str(True) 'True'

>>> bool(43) True

>>> bool('') False

>>> bool(sou verdadadeiro') True

>>> long(2.56) 2L

>>> float(233333333333337777777777778888888888999999999999933334421L) 2.3333333333333778e+56

Testem no interpretador!

Tipos-classe: Operadores Aritmticos


Padres: + - * / Diviso inteira: a / b -> sendo a E b inteiros. Diviso inteira: a // b -> sendo a OU b float Diviso float: a / b -> sendo a OU b float Exponenciao: base ** exp Mdulo: a % b -> resto da diviso de a por b

Tipos-classe: Strings
Strings: strings padres so imutveis:
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 -> Operaes


+(concatenao) e *(multiplicao) >>> banda = Arctic >>> banda + Monkeys! Arctic Monkeys! >>> banda * 3 ArcticArcticArctic

Tipos-classe: Strings -> Mtodos


Utilizando os mtodos replace(),strip() faa: Troque onde houver cachorro por macaco e vice-versa:
animais=Os macacos vivem coando as costas. Se fosse um cachorro, morderia.

Traduza essa mensagem:


msg=02 42tr0n4ut42 ch3g4r4m.

Tipos-classe: Strings

Tipos-classe: Strings
Operador % usado para fazer interpolao de strings. A interpolao mais eficiente no uso de memria do que a concatenao 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 mutveis


Strings da classe UserString so mutveis:
from UserString import MutableString >>> a = MutableString( Pascal =) ) >>> print a Pascal =) >>> a[-1] = ( >>> print a Pascal =(

Tipos-classe: Strings
Smbolos usados na interpolao: %s: string. %d: inteiro. %o: octal. %x: hexadecimal. %f: real. %e: real exponencial. %%: sinal de percentagem.

Tipos-classe: Listas
Lista: so colees heterogneas de objetos, que podem ser de qualquer tipo, inclusive outras listas. Sintaxe: <varivel> = []
L = [ Douglas Adams, oi, [3.14,2.71],1]

So mutveis, podendo ser alteradas a qualquer momento. Listas podem ser fatiadas da mesma forma que as strings, mas como as listas so mutveis, possvel fazer atribuies a itens da lista.

Tipos-classe: Listas -> Mtodos


Alguns mtodos/operaes 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 -> Mtodos


Alguns mtodos/operaes 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) # posio especfica >>> lista [1, intruso, 2, 3]

Tipos-classe: Tuplas
Semelhantes as listas, porm so imutveis: no se pode acrescentar, apagar ou fazer atribuies aos itens. Utilidade: aloca memria de forma contnua, melhorando desempenho. Indicado para utilizao matemtica. Sintaxe: <varivel> = ()
tuplita = (142857,Chico Buarque,uRichard Dawkins) tupra = 'Michael Jackson', "Howlin' Wolf", 'John Coltrane'

A funo list() transforma uma tupla em lista A funo tuple() transforma uma lista em tupla

Tipos-classe: Tuplas -> Mtodos


alguns

mtodos: count() : conta quantos itens existe do valor passado como paramtro(serve para lista tambm): a = 1,1,3,3,4 a.count(1) >> 2 index() : retorna a primeira posio que o valor passado como paramentro aparece. a.index(3) >>2

Tipos-classe: Dicionrios
Um dicionrio uma lista de associaes compostas por uma chave nica e estruturas correspondentes. Dicionrios so mutveis, tais como as listas. A chave precisa ser de um tipo imutvel, geralmente so usadas strings, mas tambm podem ser tuplas ou tipos numricos. J os itens dos dicionrios podem ser tanto mutveis quanto imutveis. O dicionrio do Python no fornece garantia de que as chaves estaro ordenadas.

Tipos-classe: Dicionrios

Tipos-classe: Dicionrios -> Mtodos


Exemplo de dicionrio:
>>> dic = {pi: 3.1415, 42: Douglas Adams} >>> dic[pi] 3.1415 >>> dic[42] Douglas Adams >>> dic[python] = massa! >>> dic[python] massa >>> # se a chave no 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: Dicionrios -> Mtodos


>>> dic.get(42,Caso no 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. Porm, muitas coisas em Python so considerados booleanos bool() : verifica se a varivel 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 possvel usar vrios operadores na relao: >>> 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 vrgula (,) permitem continuar um cdigo em outras linhas. Para comentrios: #. E a linha ser ignorada, com exceo de comentrios funcionais. Dois pontos (:) delimitam blocos. Em Python, os blocos de cdigo so delimitados pelo uso de endentao.

Sintaxe: Codificao

Para alterar a codificao do arquivo fonte do programa acrescenta-se um comentrio funcional no inicio do cdigo:

No inicio do arquivo, no qual <encoding> a codificao do arquivo (geralmente latin1 ou utf-8).

Funes
No Python, as funes: Podem retornar ou no objetos. Aceitam Doc Strings. Aceitam parmetros opcionais (com defaults). Se no for passado o parmetro ser igual ao default definido na funo. Aceitam que os parmetros sejam passados com nome. Neste caso, a ordem em que os parmetros foram passados no importa. Tem namespace prprio (escopo local), e por isso podem ofuscar definies de escopo global.

Funes
Sintaxe:
def <nome da funo> (<paramtros>):
Ex.:

#escrevam isso em um arquivo!


Sada: 1024 6.543216468462249 Funcao de exponenciacao.

Funes
permite passagem de parmetro por nome:

Sada: #00ff00 #00ff00 #00ff00

Escopo das variveis

Escopo das variveis


Para declarar, dentro de algum escopo, uma variavel global, usa-se o comando global:

Sada: oi none oie

Controle de fluxo: if, elif e else

Se o bloco de cdigo for composto de apenas uma linha, ele pode ser escrito aps os dois pontos.
Sada: >:D mim feliz

Laos de Repetio: for

for: a estrutura de repetio mais usada no Python. A instruo aceita no s sequncias estticas, mas tambm sequncias geradas por iteradores.
<variavel> in <estrutura itervel>:

sintaxe: for

Iteradores so estruturas que permitem iteraes, ou seja, acesso aos itens de uma coleo de elementos, de forma sequencial Break, continue e else permitidos.

Laos de Repetio: for

Sada: >>1 => Scrates >>2 => Aristteles

>>3 => Plato


>>4 => Descartes >>5 => Nietzsche

Laos de repetio: while

While: O lao while adequado quando no h como determinar quantas iteraes vo ocorrer e no h uma sequncia a seguir.

Entrada e saida de dados


O comando print escreve na sada padro do Python. A entrada padro se d pela funo 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.

Manipulao de arquivos
Funo Open(endereco,<modo>) Sendo os modos:
r: somente leitura (padro) w: escrita a: escrita adio b: binario

operador + permite leitura e gravao.

Manipulao de arquivos: mtodos


<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

Mdulo: 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) #mdulo de algum valor 5.0 >>> math.pi: #constante Pi 3.141592653689793 >>> math.e: #nmero de Euler 2.718281828459045

Orientao a Objetos
Objetos so abstraes computacionais que representam entidades, com suas qualidades (atributos) e aes (mtodos) que estas podem realizar. A classe a estrutura bsica do paradigma de orientao a objetos, que representa o tipo do objeto, um modelo a partir do qual os objetos sero criados.

Orientao a Objetos: Classe

Orientao a Objetos:
Os atributos so estruturas de dados que armazenam informaes sobre o objeto e os mtodos so funes associadas ao objeto, que descrevem como o objeto se comporta. Sintaxe:

Orientao a Objetos:
O interpretador Python possui um recurso chamado coletor de lixo (Garbage Collector) que limpa da memria objetos sem referncias. mtodo __init__() inicializa os valores do parmetros mtodo __repr__() uma representao do objeto como string

Orientao a Objetos: Definindo uma classe

Orientao a Objetos: Definindo uma classe


Privatizando variveis de instncia.

Orientao a Objetos: Definindo uma classe Dentro da classe


Sada:

Fora da classe

Cdigo-fonte = mdulo?

Ao fazermos a verificao do namespace __name__ como sendo o __main__, verificamos se estamos rodando o arquivo fonte ou se estamos apenas importando-o

Cdigo-fonte = mdulo?
Rodando o arquivo

Do mdulo pessoa.py, importe Pessoa. Nesse caso, no rodar o main do arquivo pessoa.py, pois estamos no namespace do interpretador Todos arquivos *.py so tanto cdigo-fonte quanto um mdulo.

Orientao a Objetos: Herana Dentro da classe

Orientao a Objetos: Serializao


basicamente voc salvar um objeto em um arquivo. Como tudo em Python objeto, voc pode salvar qualquer coisa com serializao. 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 persistncia com recursos mais avanados.

Orientao a Objetos: Serializao


Importe o modulo pickle para salvar o objeto, sintaxe:
pickle.dump(<objeto>,file(<nomeArquivo>,w))

para reabrir o objeto:


a = pickle.load(file(<nomeArquivo>))

Funes Lambda (Programao Funcional)


Programao funcional um paradigma que trata a computao como uma avaliao de funes matemticas. No Python, lambda uma funo annima composta apenas por expresses. As funes lambda podem ter apenas uma linha, e podem ser atribudas a uma varivel.

Funes Lambda (Programao Funcional)


sintaxe:
<funcao> = lambda <lista de variveis>: <expresses >

Tratamento de Excees
Quando ocorre uma falha no programa (como uma diviso por zero, por exemplo) em tempo de execuo, uma exceo gerada. Se a exceo no for tratada, ela ser propagada atravs das chamadas de funo at o mdulo principal do programa, interrompendo a execuo

Tratamento de Excees
print 1/0 >>>Traceback (most recent call last): File "<input>", line 1, in ? ZeroDivisionError: integer division or modulo by zero

Tratamento de Excees
try: print 1/0 except ZeroDivisionError: print 'Erro ao tentar dividir por zero. >>>Erro ao tentar dividir por zero.

Biblioteca padro
comum dizer que o Python vem com baterias inclusas, em referncia a vasta biblioteca de mdulos e pacotes que distribuda com o interpretador. Alguns mdulos importantes da biblioteca padro: Matemtica: math, cmath, decimal e random. Sistema: os, glob, shutils e subprocess. Threads: threading. Persistncia: pickle e cPickle. XML: xml.dom, xml.sax e elementTree (a partir da verso 2.5). Configurao: ConfigParser e optparse. Tempo: time e datetime. Outros: sys, logging, traceback, types e timeit.

Bibliografia
Python para Desenvolvedores,Luiz Eduardo Borges, 2 edio, 360 pag., Edio do Autor, Rio de Janeiro, 2010, http://ark4n.wordpress.com/python/ How to Think like a Computer Scientist: Learning with Python, Allen Downey, Jerey 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.