Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python - Uma análise da linguagem e seu ecossistema

Python - Uma análise da linguagem e seu ecossistema

Uma análise da linguagem Python e seu ecossistema

Alexandre Vicenzi

July 20, 2018
Tweet

More Decks by Alexandre Vicenzi

Other Decks in Programming

Transcript

  1. print(about_me) { "name": "Alexandre Vicenzi", "role": "Software Engineer", "loves_python": True,

    "social_accounts": { "twitter": "twitter.com/alxvicenzi", "github": "github.com/alexandrevicenzi", "linkedin": "linkedin.com/in/alexandrevicenzi", }, }
  2. História • Criada por Guido van Rossum ◦ Centrum Wiskunde

    & Informatica (CWI) • 1989 - 1990 • Inspirada na linguagem ABC e influenciada por Algol, C, Lisp e outras • Ruby foi inspirada no Python • Ênfase em legibilidade de código • Monty Python's Flying Circus deu origem ao nome da linguagem
  3. Características da linguagem • Orientada a objetos • Imperativa •

    Funcional • Dinamicamente tipada • Fortemente tipada • Duck Typing • Metaprogramação • Gerenciamento de memória • Interpretada
  4. Versões • 1991 - Python 0.9.0 (Primeira versão pública) •

    1994 - Python 1.0 • 2000 - Python 2.0 • 2008 - Python 3.0 & Python 2.6 • 2009 - Python 3.1 • 2010 - Python 2.7 • 2011 - Python 3.2 • 2012 - Python 3.3 • 2014 - Python 3.4 • 2015 - Python 3.5 • 2018 - Python 3.7 • 2020 - Descontinuação do Python 2.7
  5. Implementações • CPython (Implementação oficial escrita em C) • IronPython

    (.NET) • Jython (JVM) • Numba (LLVM) - Suporte a GPU • PyPy (JIT compiler) • Pyston (LLVM e JIT) - Em desenvolvimento • MicroPython (Micro controladores) • Stackless • Cython (Extensão da linguagem)
  6. Desvantagens • Mais lenta em alguns cenários ◦ Em comparação

    a C e Go • Erros em runtime ◦ Por não ser compilada alguns erros só são percebidos durante a execução
  7. Fibonacci def fib(n): a, b = 0, 1 while a

    < n: print(a, end=' ') a, b = b, a+b print() fib(1000)
  8. Classe class Dog: def __init__(self, name): self.name = name self.tricks

    = [] def add_trick(self, trick): self.tricks.append(trick) d = Dog('Bud') d.add_trick('roll over') d.add_trick('play dead')
  9. Novidades • 3.0 ◦ Print virou uma função ◦ Alterações

    na sintaxe (incompatível com Python 2) ◦ Novo formatador de string • 3.4 ◦ Asynchronous I/O • 3.5 ◦ Novo operador @ para multiplicação de matrizes ◦ Type hints ◦ Async e Await • 3.6 ◦ String interpolation • 3.7 ◦ Data Classes
  10. Suporte de frameworks/bibliotecas • A maioria suporta Python 3 ◦

    Requests ◦ Boto ◦ Jinja2 ◦ IPython ◦ Ansible ◦ Entre outros • Alguns estão começando a remover suporte a Python 2 ◦ Django ◦ Tornado ◦ NumPy ◦ Pandas ◦ Wagtail
  11. Web Server Gateway Interface (WSGI) • Interface entre Web Servers

    e Web Applications • Padronização proposta pela PEP-333 e PEP-3333 • WSGI Servers populares ◦ Gunicorn ◦ uWSGI ◦ Apache mod_wsgi
  12. Django • Full Stack Framework ◦ ORM ◦ Template Engine

    ◦ Site Admin ◦ Internacionalização • Seguro ◦ XSS ◦ CSRF ◦ SQL Injection ◦ Clickjacking • Escalável (up to 50k req/s) • Possui Web Server interno apenas para desenvolvimento
  13. Tornado • Full Stack Framework ◦ Template ◦ Routing ◦

    Internacionalização • Non-blocking I/O • Ideal para long polling e websockets • Suporte parcial ao WSGI • Web Server assíncrono interno • Mantido pelo Facebook
  14. Flask • Micro Framework ◦ Suporte a REST ◦ Jinja2

    Template ◦ Suporte a cookies • Possui Web Server interno apenas para desenvolvimento • Compatível 100% com WSGI • Extenções ◦ Admin ◦ Cache ◦ Gerenciador de sessão ◦ Internacionalização ◦ ORM ◦ OAuth
  15. Sanic • Flask like • Async requests • Python 3.5+

    (asyncio/uvloop) • Possui Web Server interno ▄▄▄▄▄ ▀▀▀██████▄▄▄ _______________ ▄▄▄▄▄ █████████▄ / \ ▀▀▀▀█████▌ ▀▐▄ ▀▐█ | Gotta go fast! | ▀▀█████▄▄ ▀██████▄██ | _________________/ ▀▄▄▄▄▄ ▀▀█▄▀█════█▀ |/ ▀▀▀▄ ▀▀███ ▀ ▄▄ ▄███▀▀██▄████████▄ ▄▀▀▀▀▀▀█▌ ██▀▄▄▄██▀▄███▀ ▀▀████ ▄██ ▄▀▀▀▄██▄▀▀▌████▒▒▒▒▒▒███ ▌▄▄▀ ▌ ▐▀████▐███▒▒▒▒▒▐██▌ ▀▄▄▄▄▀ ▀▀████▒▒▒▒▄██▀ ▀▀█████████▀ ▄▄██▀██████▀█ ▄██▀ ▀▀▀ █ ▄█ ▐▌ ▄▄▄▄█▌ ▀█▄▄▄▄▀▀▄ ▌ ▐ ▀▀▄▄▄▀ ▀▀▄▄▀
  16. Bottle • Micro Framework ◦ Routing ◦ Templates (Jinja2, Mako

    e Cheeta) ◦ Suporte a Cookies, File Upload • Possui Web Server interno apenas para desenvolvimento • Compatível com WSGI • Arquivo único (.py) • Sem dependências externas
  17. Outros frameworks • Full Stack Frameworks ◦ TurboGears ◦ Web2py

    • Micro Frameworks ◦ CherryPy ◦ Falcon ◦ Pyramid • CMS ◦ Django CMS ◦ Mezzanine ◦ Wagtail • Wiki Engine ◦ MoinMoin
  18. NumPy • Pacote essencial para computação científica • Sofisticado Array

    N-dimensional • Integração com C/C++ e Fortran • Cálculos ◦ Álgebra Linear ◦ Transformada de Fourier ◦ Random Numbers
  19. SciPy • Pacote para matemática, ciência e engenharia • Depende

    do NumPy • Vários módulos ◦ Estatística ◦ Otimização ◦ Integração ◦ Álgebra Linear ◦ Transformada de Fourier ◦ Processamento de imagens e sinais ◦ ODE Solver
  20. Pandas • Análise de dados e modelagem • Ferramentas para

    leitura e gravação de estruturas de dados ◦ CSV ◦ Arquivos de texto ◦ Microsoft Excel ◦ Bancos SQL ◦ HDF5 • Alternativa a linguagem R
  21. Matplotlib • Plotagem 2D ◦ Plotagem em geral ◦ Histogramas

    ◦ Densidade espectral ◦ Bar Charts ◦ Error Charts ◦ Gráfico de dispersão • MATLAB like • Integrações ◦ IPython ◦ Jupyter Notebook ◦ Web ◦ GTK, Qt, WX, Tkinter
  22. scikit-learn • Ferramentas para mineração e análise de dados •

    Baseado no NumPy, SciPy e Matplotlib • Inclui vários algoritmos ◦ Classificasão ◦ Regressão ◦ Clustering ◦ Support Vector Machine ◦ Random Forest ◦ K-Means • Popular no aprendizado de Machine Learning • Sem suporte a GPUs
  23. TensorFlow • Machine Learning e Deep Leaning para pesquisa e

    produção • Suporte a CPUs, GPUs e TPUs • Desenvolvido e mantido pelo Google • Suporte a XLA (Accelerated Linear Algebra) ◦ Compilador de Álgebra Linear que otimiza cálculos • APIs de alto nível
  24. Keras • API de alto nível para redes neurais •

    Prototipação rápida • Suporta CNNs e RNNs • Suporta múltiplos backends ◦ TensorFlow ◦ Theano ◦ CNTK
  25. PyTorch • Framework de Deep Learning • Baseado no Torch

    (Lua) • NumPy like que roda em GPUs • Comumente utilizado para NLP • Suporte a CPUs e GPUs • Desenvolvido pelo Facebook
  26. Theano • Biblioteca de computação numérica ◦ Define, otimiza e

    calcula expressões matemáticas • Integração com NumPy • Usa GPU para cálculos • Desenvolvida pelo MILA • Suporte descontinuado
  27. Caffe • Framework de Deep Learning • Desenvolvido pela Berkeley

    Artificial Intelligence Research (BAIR) • Modular • Rápido ◦ Processa 60M de imagens por dia em uma única NVIDIA K40 • Suporte a diferentes tipos de arquiteturas ◦ CNN ◦ RCNN ◦ LSTM ◦ FC NN • Escrito em C++ com interface em Python
  28. OpenCV • Focada em aplicações de tempo real • Suporte

    a OpenCL e CUDA • Desenvolvida pela Intel • Escrito em C++ com interface em Python • Principais módulos ◦ Processamento de Images ◦ Processamento de Vídeos ◦ Estrutura de dados ◦ Álgebra Linear ◦ GUI • Multi plataforma
  29. SimpleCV • Framework para Visão Computacional em cima do OpenCV

    • Mais simples e intuitivo que o OpenCV • Possui shell interativo
  30. scikit-image • Coleção de algoritmos para processamento de imagens ◦

    Segmentação ◦ Transformações geométricas ◦ Manipulação de Color Space ◦ Análise ◦ Filtros ◦ Morfologia ◦ Feature Detection ◦ E mais • Escrito em Python, Cython e C
  31. Web Crawling • Scrapy • PySpider • Parsel • BeatifulSoup

    • MechanicalSoup • Requests • lxml
  32. Anaconda • Gerenciador de pacotes • Gerenciador de ambientes •

    Distribuição Python • Alternativa ao pip e pyenv
  33. Jupyter Notebook • Editor web com várias funcionalidades • Suporta

    as linguagens de programação dos cientistas de dados ◦ Julia ◦ Python ◦ R ◦ Scala ◦ Entre outras • Permite rodar código no browser • Suporte a equações, visualizações e narração de textos • Integração com Spark
  34. IPython • Shell interativo poderoso • Um kernel do Jupyter

    • Tab completion • Integração com pdb e profiler • Persistência de histórico • Syntax Highlighting