92
Programando em alto nível Igor Sobreira www.igorsobreira.com

Python - Programando em alto nível

Embed Size (px)

DESCRIPTION

Visão geral do que é a linguagem de programação Python, como usá-la e onde usá-la.

Citation preview

Page 1: Python - Programando em alto nível

Programando em alto nível

Igor Sobreirawww.igorsobreira.com

Page 2: Python - Programando em alto nível

Eu te conheço?

• Me chamo Igor Sobreira

• Faço TSI no IFPB (antigo CEFET-PB)

• Programo em Python a uns 3, 4 anos

• Trabalho com Python pra web (Django)

• Smart Nuts Technology (www.smartnutstechnology.com)

• Velejo de windsurf (quando dá...)

Page 3: Python - Programando em alto nível

Python começou ...

• ... em 1991, o primeiro release: 0.9.0

• Multi-paradigma

• Multi-plataforma

• Tipagem dinâmica e forte

• Biblioteca padrão extensa

• Fácil de aprender

• Preza pela beleza de código ... beleza?

Page 4: Python - Programando em alto nível

Beleza Importa!Beleza Importa!

Page 5: Python - Programando em alto nível

http://www.fickr.com/photos/jorgenjuul/2315754513/

Código bonito é código legívelCódigo bonito é código legível

mais fácil de mantermais fácil de manter

Page 6: Python - Programando em alto nível

http://www.fickr.com/photos/carpe_feline/539715666/

VHLLVHLLLinguagem de Altíssimo NívelLinguagem de Altíssimo Nível

Page 7: Python - Programando em alto nível

Para os humanos

Page 8: Python - Programando em alto nível

Interpretador interativo

Page 9: Python - Programando em alto nível

Onde estamos? Pra onde vamos?

• Python 3.0: quebra de compatibilidade

• 2to3 ajuda na migração

• ainda pouco usada (poucos módulos externos)

• Versão atual 2.6.2: compatível com a família 2.x

• traz algumas novidades do Python 3.0

• lança warnings de features depreciadas

Page 10: Python - Programando em alto nível

VariáveisVariáveis

http://www.fickr.com/photos/mangtronix/404043506/

Page 11: Python - Programando em alto nível

Objetos.Eles estão em todos os lugaresEles estão em todos os lugares

Page 12: Python - Programando em alto nível

Tipagem Dinâmica

• não é preciso declarar o tipo de uma variável

• mas é preciso inicializá-la

“ ... executam em tempo de execução muitos comportamentos que outras linguagens realizam em tempo de compilação” Wikipedia

Page 13: Python - Programando em alto nível
Page 14: Python - Programando em alto nível

... e Forte

Page 15: Python - Programando em alto nível
Page 16: Python - Programando em alto nível

O que eu tenho disponível?O que eu tenho disponível?

Page 17: Python - Programando em alto nível

• listas [ coleção, de, objetos ]

• tuplas (listas, imutáveis)

• dicionários { chave: valor }

• “strings”

• u’unicode’,

• r’string cruas\n’

Page 18: Python - Programando em alto nível

Baterias InclusasBaterias Inclusas

http://www.fickr.com/photos/fensterj/138774850/

Quase tudo que você precisa vem embutidoQuase tudo que você precisa vem embutido

Page 19: Python - Programando em alto nível

reStringIO

datetime

calendar

weakref

decimalrandom

math

itertools

osos.path

pickle

sqlite3 shelve gzip

tarfle

csvrobotparser

hashlib

xml.*

threading multiprocessing

emailjson

urllib/urllib2

pdb

http://docs.python.org/library/

Page 20: Python - Programando em alto nível

MultiplataformaMultiplataforma

Page 21: Python - Programando em alto nível

• Linux

• Unix

• Windows

• OS X

• Maemo - PyMaemo

• S60 - PyS60

• Android

• E também na JVM e .NET

Page 22: Python - Programando em alto nível

PythonImplementação X EspecifcaçãoImplementação X Especifcação

Page 23: Python - Programando em alto nível

• Implementação de referência, ofcial

• Escrita em C

• Versão atual: 3.0.1 / 2.6.2

CPython

Page 24: Python - Programando em alto nível

Jython

• Python na JVM

• Implementação em Java

• Versão atual: 2.5.0

Page 25: Python - Programando em alto nível

IronPython

• Python na .NET e Silverlight

• Versão atual: 2.0.1

• Compatível com CPython 2.5

Page 26: Python - Programando em alto nível

Stackless Python

• Um python “melhorado”

• Microthreads

• Threads mais “leves”

• Não são threads reais

• Um round robin scheduler embutido executa as tasklets

Page 27: Python - Programando em alto nível

Pypy

• “... framework para produção de implementações de linguagens dinâmicas”

• “implementação da linguagem Python rápida, fexível e compatível, usando esse framework para permitir novas funcionalidades avançadas sem precisar codifcar detalhes de baixo nível”

• Python em (R)Python!

• Geração de um compilador JIT!!

Page 28: Python - Programando em alto nível

Unladen Swallow

• Branch do CPython feito pelo Google

• Meta? ser 5x mais rápido que o CPython

• Como? usando o JIT da LLVM

• Boa sorte google :-)

• Desenvolvimento ativo

Page 29: Python - Programando em alto nível

Programação Funcional

Page 30: Python - Programando em alto nível

flter()

Page 31: Python - Programando em alto nível

zip()

Page 32: Python - Programando em alto nível

E muito mais...• Python tem um exelente suporte a programação funcional

• Muitas funções embutidas muito úteis

• http://docs.python.org/library/functions.html

• functools, itertools

• O tratamento de parâmetros é muito fexível

• Funções são objetos de primeira classe

• Closures

Page 33: Python - Programando em alto nível

Decorators

• Modifcam, incrementam uma função ou método

• Fazem alguma coisa antes e/ou depois da função real

• Filtram parâmetros e/ou valores de retorno

• A partir do Python 2.6 podem decorar classes!

Page 34: Python - Programando em alto nível
Page 35: Python - Programando em alto nível
Page 36: Python - Programando em alto nível

Programação Orientada a Objetos

Page 37: Python - Programando em alto nível
Page 38: Python - Programando em alto nível
Page 39: Python - Programando em alto nível

Métodos estáticos e de classe

Page 40: Python - Programando em alto nível

Herança Múltipla

falar()falar()

RobôRobô

acelerar()acelerar()

CarroCarro

TrânsformerTrânsformer

Page 41: Python - Programando em alto nível

Metaclasses

• Uma classe constrói objetos

• Uma metaclasse constrói classes

Page 42: Python - Programando em alto nível

Classes Abstratas

• Novidade no Python 2.6

• Defnem a interface de um objeto

• É uma forma de organizar as interfaces de suas classes, simplifcando a refexão

• Classes abstratas + herança múltipla torna desnecessário um tipo interface, como existe linguagems como Java e PHP

Page 43: Python - Programando em alto nível

collections.Container

Page 44: Python - Programando em alto nível

Properties

• Evite getters e setters desnecessários

• Use-os somente quando precisar

• E quando usar, seja transparente

• Não precisa encapsular algo que (ainda) não existe!

Page 45: Python - Programando em alto nível
Page 46: Python - Programando em alto nível
Page 47: Python - Programando em alto nível

Isso é só começo ...• OO em python é simples e poderoso!

• é fácil deixar seu objeto parecido com um tipo nativo

• sobrecarga de operadores (+, -, /, *)

• descriptors

• alto nível de refexão

Page 48: Python - Programando em alto nível

Persistênciade

Dados

Page 49: Python - Programando em alto nível

• pickle e cPickle: serializa objetos

• shelve: objeto dictionary-like persistente

• o valor pode ser qualquer objeto pickleble

• Unix dbm: pares chave-valor

• chaves e valores são strings

Page 50: Python - Programando em alto nível

• Python DB API (PEP 0242)

• sqlite3 (builtin!)

• MySQL - mysqldb

• PostgreSQL - psycopg2

• Oracle - cx_Oracle

• Microsoft SQL Server - pymssql

Bancos Relacionais

Page 51: Python - Programando em alto nível

ORMs• SQLAlchemy

• Django ORM

• DejaVu

• Storm

• SQLObject

• Autumm

Page 52: Python - Programando em alto nível

Banco de Dados OO

• ZODB

• Durus

• pod - Pickled Object Database

Page 53: Python - Programando em alto nível

couchdb-pythonhttp://code.google.com/p/couchdb-python/

Page 54: Python - Programando em alto nível

Programação ConcorrenteProgramação Concorrente

Page 55: Python - Programando em alto nível

subprocess

• inicar processos e analisar input/output/error

• subprocess.call( [‘ls’, ‘-la’] )

Page 56: Python - Programando em alto nível

threading

• Fácil manipulação de threads

• Semáforos

• Locks

• Eventos

Page 57: Python - Programando em alto nível

GILGIL

Page 58: Python - Programando em alto nível

Global Interpreter Lock

• Não permite que duas threads executem em paralelo na mesma VM!!

• threads são concorrentes, mas não paralelas

• facilita muito a implementação, e módulos externos em C/C++

• Paralelismo real? Use processos.

Page 59: Python - Programando em alto nível

multiprocessing

• quase a mesma interface de threading

• mas com processos, e não threads

• abstrai criação, interação entre processos ...

Page 60: Python - Programando em alto nível
Page 61: Python - Programando em alto nível

• Desenvolvimento web: frameworks

• frameworks full-stack ou componentes separados

• Web Services

• python conversa com: JSON, XML, YAML

• SOAP, RPC, REST

Page 62: Python - Programando em alto nível

Fazendo uma busca no Web Service do twitter.com

Page 63: Python - Programando em alto nível

Testes Automatizados

Page 64: Python - Programando em alto nível

• as docstrings viram testes reais

• documentação e teste num só lugar

• basta simular uma sessão no interpretador interativo ( >>> )

doctests

Page 65: Python - Programando em alto nível
Page 66: Python - Programando em alto nível

unittest

• Testes automatizados

• A versão em Python do JUnit

• Sua aplicação é formada por pequenas unidades testáveis

Page 67: Python - Programando em alto nível
Page 68: Python - Programando em alto nível

E por fora?

http://www.fickr.com/photos/autobahn/377694041/

Page 69: Python - Programando em alto nível

• Nose

• py.test

Eles procuram e rodas os testes para você.

E ainda extendem o unittest padrão

http://www.fickr.com/photos/rabbitriot/2910866645/

Page 70: Python - Programando em alto nível

• python-mock

• minimock

Não teste objetos externos.

Falsifque-os, e espere o melhor deles.

Ou simplesmente. Monkeypatch :-)

Page 71: Python - Programando em alto nível

Conversa com outras linguagens

• C/C++

• Jython (Java)

• IronPython (.NET)

Page 72: Python - Programando em alto nível

Onde usar?Onde usar?

Page 73: Python - Programando em alto nível

• Web

• GUI

• Mobile

• Games e 3D

• Comp. Gráfca

• Ciência e Educação

• Rede

• Adm. de Sistemas

Page 74: Python - Programando em alto nível

Quem usa?Quem usa?

Page 75: Python - Programando em alto nível

www.youtube.com

Page 76: Python - Programando em alto nível

www.cia.gov

Page 77: Python - Programando em alto nível

www.brasil.gov.br

Page 78: Python - Programando em alto nível

www.vericia.com

Page 79: Python - Programando em alto nível

Aync - Stoq. Gestão comercial

Page 80: Python - Programando em alto nível

InVersalius

Page 81: Python - Programando em alto nível

Blender

Page 82: Python - Programando em alto nível

Inkscape

Page 83: Python - Programando em alto nível

INdT - Nokia

Page 84: Python - Programando em alto nível

DocumentaçãoDocumentação

Page 85: Python - Programando em alto nível

docs.python.orgdocs.python.orgpython.org.brpython.org.br

Page 86: Python - Programando em alto nível
Page 87: Python - Programando em alto nível

Python para desenvolvedoreshttp://ark4n.wordpress.com/python/

Page 88: Python - Programando em alto nível

Text

A Comunidade

Page 89: Python - Programando em alto nível

Encontro Brasileiro

• I PyconBrasil (2005) Unicamp, São Paulo/SP

• II PyconBrasil (2006) Interlegis, Brazília/DF

• III PyconBrasil (2007) SOCIESC, Joinville/SC

• Pyconbrasil [4] (2008) UVA, Rio de Janeiro/RF

• Pythonbrasil [5] UCS, Caxias do Sul/RS

• 10 a 12 de Setembro de 2009

Page 90: Python - Programando em alto nível

• python.org.br

• Grupos

• python-brasil - 2960

• django-brasil - 1034

• zope-pt - 1047

• IRC

• #python-br

• #django-br

• #qualquer-ferramenta-ou-framework

Page 91: Python - Programando em alto nível

Bem vindo ao mundo Python

Page 92: Python - Programando em alto nível

Obrigado. Dúvidas?Obrigado. Dúvidas?

http://www.fickr.com/photos/pocar/3285251509/

Igor SobreiraIgor Sobreirawww.igorsobreira.comwww.igorsobreira.com