Anda di halaman 1dari 60

Minicurso Python

Leonardo Santagada Kao Cardoso Flix

Introduo
Criador da linguagem e benevolent dictator for life: Guido Van Rossum Completamente Open Source (sim Java e C# eu estou olhando pra vocs)

Caractersticas de Python
Interpretada Identao Os blocos so separados por identao e no por delimitadores Tipagem Dinmica Tipagem Forte

Quem usa Python

Identao

Identao nvel 0 Identao nvel 1 Usando 4 espaos no estilo da PEP - 8

for x in range(10): print x print X*2 print "fim"

Escrevendo Programas
Um programa python uma coleo de arquivos .py Um arquivo .py vai ser chamado de mdulo ou script, dependendo da forma como ser usado Podem ser organizados em mdulos e pacotes Podem ser convertidos para um executvel para windows e pacotes .app para mac.

Escrevendo Programas
Pacote modulo.py modulo.py import

script.py

modulo.py

Ol Mundo!
Abram o Interpretador No Windows o PyCrust No Ubuntu abram o terminal e digitem pycrust ou python Digitem o seguinte comando >>> print "Ol mundo!" e sejam bem vindos ao mundo da programao Python!

Aprendendo a se virar...
Ajuda a qualquer hora no interpretador >>> help(blah) Consultar propriedades de objetos >>> dir(foo) Descobrir tipos de objetos >>> type(obj) Documentao extensa na internet Tutoriais Referncias completas

O Interpretador seu Amigo!


Use e abuse do interpretador interativo Bom para: Aprender a usar funes e mtodos Testar conceitos Documentao interativa (melhor que um manual esttico!) Muito Importante Seu comando deu erro? No se desespere! Leia calmamente a mensagem e tente entend-la.

Tipos Numricos
int inteiro de 32 bits long inteiro de preciso ilimitada (apenas pela memria de sua mquina) float preciso de um double de C complex nmero complexo parte real e imaginria com preciso de double em C

Expresses Matemticas
Sintaxe semelhante a outras linguagens (2 + 4) * (3 - 8) / 10 Alguns operadores incomuns x**y # x elevado na y x // y # diviso inteira de x por y O smbolo _ no interpretador, guarda o valor da ltima expresso >>> 2+2 4 >>> _ 4

Importando Mdulos
Um mdulo um arquivo python contendo definies e comandos. Para usar definies de um mdulo em um script usamos o comando import >>> import math >>> math.pi 3.1415926535897931 >>> math.degrees(_)

Exerccios
1. Execute a expresso 100 + 1 / 2 no interpretador. A resposta foi a esperada?

2. Escreva uma expresso que calcule a distncia entre 2 pontos 2D representados por coordenadas x1, y1, x2, y2 (dica: importar mdulo math e consultar suas funes e respectivas ajudas)

Exerccios: soluo
1. Execute a expresso 100 + 1 / 2 no interpretador. A resposta foi a esperada? A resposta 100, pois dividir dois inteiros em Python gera um resultado inteiro 2. Escreva uma expresso que calcule a distncia entre 2 pontos 2D representados por coordenadas x1, y1, x2, y2 (dica: importar mdulo math e consultar suas funes e respectivas ajudas) math.sqrt((x2-x1)**2 + (y2-y1)**2)

Comando Condicional if
Sintaxe simples e direta if <cond1>: <cmds> elif <cond2>: ... elif <condN>: <cmds> else: <cmds>

Lao while
Sintaxe muito simples: while <cond>: <cmds> E os usos de sempre...

Expresses booleanas
Operadores de comparao ==, <=, >=, <>, !=, is [not] Operadores booleanos not, and, or Operador de teste de pertinncia [not] in if e in lista: print "pertence" Encadeamento if 1 < x < 10: print "x entre 1 e 10"

Expresses booleanas
None, [], {}, (), '' e 0 so considerados como False em expresses booleanas Expresses condicionais Retornam valores de acordo com testes <var> = <expr1> if <expr2> else <expr3>

Exerccios
1. Faa um programa que leia 3 valores inteiros a, b e c e imprima "a , b e c formam uma tripla pitagrica" caso satisfaam a2 = b2 + c2. Na string exibida a, b e c devem ser os valores lidos. (dica: use a funo input para ler os valores)

Exerccios: soluo
1. Faa um programa que leia 3 valores inteiros a, b e c e imprima "a , b e c formam uma tripla pitagrica" caso satisfaam a2 = b2 + c2. Na string exibida a, b e c devem ser os valores lidos. (dica: use a funo input para ler os valores) a,b,c = input("Digite 3 valores:\n") if a**2 == b**2 + c**2: print "%d , %d e %d formam uma \ tripla pitagrica" % (a,b,c)

Definindo Funes
Nada estranho aqui def foo(arg1, arg2, ... argn): """Escreva algo til aqui""" <cmds> return <expr>

# docstring

docstring: documenta sua funo (lembra do help?)

Listas
Estrutura de dados essencial Sintaxe simples >>> l = ['a', 'b', 3, 'd', [5, 6]] >>> l[0] 3 >>> l[3] 'd' >>> l[4][1] 6

Manipulando Listas
Insero de um elemento >>> lista.append(obj) # insere no final >>> lista.insert(i, obj) # insere na posio i Ordenao de uma lista >>> lista.sort() Revertendo a lista >>> lista.reverse() Retirando elementos >>> lista.pop() #retorna e remove ltimo elemento >>> lista.pop(0)#retorna e remove o primeiro

Manipulando Listas
Funes builtin : sum(lista): retorna a soma dos elementos da lista zip(lista1, lista2, ..., listaN): retorna uma sequncia de tuplas ordenadas com elementos de cada lista enumerate(lista): retorna uma sequncia de tuplas (i, elem) onde i um contador crescente

Comando for
Diferente do for tradicional Semelhante ao for each encontrado em algumas linguagens Itera sobre valores de uma sequncia for i in l: print type(i) Funo range(start, [end, step])

List Comprehension
Lembram-se da notao de conjuntos por compreenso? { x | x E A ^ x > 0} Python possui uma construo semelhante [x for x in A if x > 0] Ou, de forma mais geral [<exp> for <it> in <seq> [ if <cond1> ... if <condN>] ] Notao poderosa e clara para construo de listas a partir de outras listas

List Comprehension
Mapeamento Transforma cada elemento de uma lista em outra coisa

[f(x) for x in l]

List Comprehension
Filtragem Gera uma nova lista com apenas alguns elementos da antiga

[x for x in l if p(x)]

Exerccios
1. Ache a soma de todos os nmeros naturais abaixo de 1000 que so mltiplos de 3 e 5

2. Some duas listas elemento a elemento, isso , sejam duas listas a = [a1, a2, ..., aN] e b = [b1, b2, ..., bN] produza uma lista [a1+b1, a2+b2, ..., aN+bN]

Exerccios: Soluo
1. Ache a soma de todos os nmeros naturais abaixo de 1000 que so mltiplos de 3 e 5 sum([x for x in range(1000) if x%3 == 0 if x%5 == 0]) 2. Some duas listas elemento a elemento, isso , sejam duas listas a = [a1, a2, ..., aN] e b = [b1, b2, ..., bN] produza uma lista [a1+b1, a2+b2, ..., aN+bN] [ai + bi for ai, bi in zip(a,b)]

Fibonacci com Geradores


def fibonacci(): n1, n2 = 1, 1 while 1: n1, n2, result = n1+n2, n1, n2 yield result yield: um return diferente retorna um valor mas a funo mantm seu estado

Tuplas
Sequncia de dados hetergeneos, assim como listas A grande diferena: tuplas so imutveis >>> t = (1,2,3) >>> t[0] 1 >>> t[1] = 4 TypeError

Dicionrios
Mapeamento chave-valor >>> d = {} >>> d['chave'] = 1337 >>> d[10] = 'abc' >>> d[(1,2,3)] = [1, 3, {'a':1, 'b':2}] No tem conceito de ordem Mtodos teis >>> d.keys() # lista de chaves >>> d.values() # lista de valores >>> d.items() # lista de tuplas (chave, valor)

Dynamic-Dispatch com Dicionrios


Funes tambm so objetos >>> def sqr(x): return x*x >>> f = sqr >>> f(2) 4 Funes annimas com lambda >>> sqr = lambda x: x*x >>> sqr(2) 4

Dynamic-Dispatch com Dicionrios


Criando um dicionrio mapeando string e funes, podemos decidir o que executar dinamicamente! o_q_fazer = { "dobro": lambda x: x*2, "raiz": lambda x: math.sqrt(x), "quadrado": lambda x: x**2 } >>> o_q_fazer["dobro"](20) 40

Exerccio
Escreva um programa com um lao que espera um par (comando, dado) do usurio a cada iterao. O programa deve executar e imprimir o resultado do comando correspondente sobre o dado. Comandos: 'reverte' s, s uma string 'quadrado' x, x um nmero 'area' r, r o raio de um crculo 'sair' deve terminar a execuo do programa

Arquivos
Arquivos em python so fceis de usar! Leitura f = file('arquivo') for line in f: print line f.close() Escrita f = file('arquivo', 'w') f.write('ol arquivo') f.close()

Intervalo

Tratamento de Erro com Excees


Excees so uma forma de alto nvel para lidar com erros Quando uma operao pode dar erro ns tentamos faz-la prevendo os possveis erros para que possamos trat-los try: v = dicionario["joo"] except KeyError, e: print '"joo" no uma chave vlida ', e

Tratamento de Erro com Excees


Da mesma forma, podemos avisar chamadas externas de nossas funes que erros ocorreram durante a execuo: def quero_um_impar(impar): if impar % 2 == 0: raise ValueError("Ei! Pedi um mpar!") print "Oba, um mpar!"

Orientao a Objetos
Uma forma de encapsular uma abstrao de um objeto ou tipo de dado junto com operaes feitas sobre eles Conceitos Classe: especificao de um tipo de objeto Atributo: uma propriedade (varivel) que pertence a um objeto Mtodo: uma operao executada sobre um objeto Instncia: um objeto em si

Orientao a Objetos
Em python, tudo um objeto: >>> " abcd ".strip() 'abcd' >>> 123 .__add__(123) 246

Classes
Sem proteo de atributos Tudo pblico Mtodos mgicos Mtodos especiais Nomes no estilo __nome__ Mais usado __init__, o mtodo que inicializa um objeto da classe, como construtores em outras linguagens Sobrecarga de operadores feita com mtodos mgicos

Criando Classes
class Shape: pass class Circle(Shape): # herana """Isso um circulo.""" def __init__(self, radius): #inicializador self.r = radius def get_area(self): return math.pi * self.r**2 c = Circle(10.0) print c.get_area()

Criando Classes
class Body: def __init__(self, mass): self.m = mass class Disc(Circle, Body): # herana mltipla def __init__(self, radius, density): Circle.__init__(self, radius) mass = density * self.get_area() Body.__init__(self, mass)

Atividade
Criar uma classe Vetor que suporte operaes de soma, subtrao e multiplicao por escalar. Para isso use os mtodos mgicos documentados na seo 3.4.7 Emulating numeric types de Language Reference no manual do Python. Tambm devem ser verificados os tipos dos argumentos dos mtodos implementados e se os tamanhos dos vetores so iguais para fazer a soma e a subtrao. Use excees TypeError e ValueError para indicar erros. Obs: Para visualizar melhor os resultados das operaes, adicione um mtodo __repr__ classe.

Show Pyrotcnico
tudo que voc queria saber sobre Python mas tinha vergonha de perguntar

Biblioteca Padro
Armazenamento de dados: pickle, sqlite, shelve, anydbm Compactao de dados: zlib, bz2, tarfile, zipfile Ferramentas de desenvolvimento: pdb, cprofile, doctest, unittest Redes: servidores para TCP/UDP/HTTP/CGI, raw

Biblioteca Padro 2
Acesso baixo nvel/so: os, sys, gc (gc.stop!), ctypes (rmi para python), thread, signal, mmap Web: urllib2, webbrowser, cgi Programao paralela: Threading (threads, locks, cond. var.), Queues XML: minidom, dom, sax, xmlrpc

Python para Web


WSGI Padro para rodar frameworks Django Zope/Plone Python Killer Application J2EE do Python Google App Engine Usa WSGI para servir aplicativos Python Django como framework padro ... inmeras possibilidades

Python para Jogos


Pygame escolha clssica e consolidada para jogos 2D Pyglet recente e promissora, baseada em OpenGL Cocos2D framework de altssimo nvel para jogos 2D feito em cima da pyglet

Python para Jogos


Panda3D Engine 3D criada pela Disney em parceria com o CarnegieMelon ETC Core escrito em C++ Jogos escritos em Python

Como passar nas cadeiras da UFRGS com Python


from ufrgs import cic; cic.graduate()

Futuro da linguagem

Como o Python Avana?


Rpido Python Enhancement Proposal ou PEP PEP 7 - como formatar cdigo C PEP 8 - como formatar cdigo Python PEP 3XXX - ligados ao Python 3.0

Python 3000
Py3k era a verso do python que nunca iria acontecer Logo sempre que algum tinha uma idia inviavel ela era para ser lanada no Py3k, e ele seria lanado no ano 3000 (In)felizmente o Python avana to rpido que a verso 3.0 vai ser lanada agora em 2008 (992 anos antes!)

Algumas Caracteristicas do Python 3.0


Unificao de strings e unicode except E1, E2, E3 as err: {x} significa set([x]) reorganizao da biblioteca padro imports relativos e absolutos um monte de coisas que a gente carinhosamente omitiu durante esse curso

Obrigado por assistir ao curso!

Anda mungkin juga menyukai