python - programando em alto nível
DESCRIPTION
Visão geral do que é a linguagem de programação Python, como usá-la e onde usá-la.TRANSCRIPT
![Page 2: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/2.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/3.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/4.jpg)
Beleza Importa!Beleza Importa!
![Page 5: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/5.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/6.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/7.jpg)
Para os humanos
![Page 8: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/8.jpg)
Interpretador interativo
![Page 9: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/9.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/10.jpg)
VariáveisVariáveis
http://www.fickr.com/photos/mangtronix/404043506/
![Page 11: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/11.jpg)
Objetos.Eles estão em todos os lugaresEles estão em todos os lugares
![Page 12: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/12.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/13.jpg)
![Page 14: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/14.jpg)
... e Forte
![Page 15: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/15.jpg)
![Page 16: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/16.jpg)
O que eu tenho disponível?O que eu tenho disponível?
![Page 17: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/17.jpg)
• 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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/18.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/19.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/20.jpg)
MultiplataformaMultiplataforma
![Page 21: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/21.jpg)
• 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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/22.jpg)
PythonImplementação X EspecifcaçãoImplementação X Especifcação
![Page 23: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/23.jpg)
• 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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/24.jpg)
Jython
• Python na JVM
• Implementação em Java
• Versão atual: 2.5.0
![Page 25: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/25.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/26.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/27.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/28.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/29.jpg)
Programação Funcional
![Page 30: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/30.jpg)
flter()
![Page 31: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/31.jpg)
zip()
![Page 32: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/32.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/33.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/34.jpg)
![Page 35: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/35.jpg)
![Page 36: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/36.jpg)
Programação Orientada a Objetos
![Page 37: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/37.jpg)
![Page 38: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/38.jpg)
![Page 39: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/39.jpg)
Métodos estáticos e de classe
![Page 40: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/40.jpg)
Herança Múltipla
falar()falar()
RobôRobô
acelerar()acelerar()
CarroCarro
TrânsformerTrânsformer
![Page 41: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/41.jpg)
Metaclasses
• Uma classe constrói objetos
• Uma metaclasse constrói classes
![Page 42: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/42.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/43.jpg)
collections.Container
![Page 44: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/44.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/45.jpg)
![Page 46: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/46.jpg)
![Page 47: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/47.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/48.jpg)
Persistênciade
Dados
![Page 49: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/49.jpg)
• 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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/50.jpg)
• 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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/51.jpg)
ORMs• SQLAlchemy
• Django ORM
• DejaVu
• Storm
• SQLObject
• Autumm
![Page 52: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/52.jpg)
Banco de Dados OO
• ZODB
• Durus
• pod - Pickled Object Database
![Page 54: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/54.jpg)
Programação ConcorrenteProgramação Concorrente
![Page 55: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/55.jpg)
subprocess
• inicar processos e analisar input/output/error
• subprocess.call( [‘ls’, ‘-la’] )
![Page 56: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/56.jpg)
threading
• Fácil manipulação de threads
• Semáforos
• Locks
• Eventos
![Page 57: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/57.jpg)
GILGIL
![Page 58: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/58.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/59.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/60.jpg)
![Page 61: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/61.jpg)
• 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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/62.jpg)
Fazendo uma busca no Web Service do twitter.com
![Page 63: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/63.jpg)
Testes Automatizados
![Page 64: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/64.jpg)
• 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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/65.jpg)
![Page 66: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/66.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/67.jpg)
![Page 68: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/68.jpg)
E por fora?
http://www.fickr.com/photos/autobahn/377694041/
![Page 69: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/69.jpg)
• 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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/70.jpg)
• 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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/71.jpg)
Conversa com outras linguagens
• C/C++
• Jython (Java)
• IronPython (.NET)
![Page 72: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/72.jpg)
Onde usar?Onde usar?
![Page 73: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/73.jpg)
• 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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/74.jpg)
Quem usa?Quem usa?
![Page 79: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/79.jpg)
Aync - Stoq. Gestão comercial
![Page 80: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/80.jpg)
InVersalius
![Page 81: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/81.jpg)
Blender
![Page 82: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/82.jpg)
Inkscape
![Page 83: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/83.jpg)
INdT - Nokia
![Page 84: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/84.jpg)
DocumentaçãoDocumentação
![Page 85: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/85.jpg)
docs.python.orgdocs.python.orgpython.org.brpython.org.br
![Page 86: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/86.jpg)
![Page 88: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/88.jpg)
Text
A Comunidade
![Page 89: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/89.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/90.jpg)
• 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](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/91.jpg)
Bem vindo ao mundo Python
![Page 92: Python - Programando em alto nível](https://reader031.vdocuments.net/reader031/viewer/2022012403/54965a01ac7959412e8b5037/html5/thumbnails/92.jpg)
Obrigado. Dúvidas?Obrigado. Dúvidas?
http://www.fickr.com/photos/pocar/3285251509/
Igor SobreiraIgor Sobreirawww.igorsobreira.comwww.igorsobreira.com