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

C46698b3fea100d88815a14eb6b6c60f?s=128

Alexandre Vicenzi

July 20, 2018
Tweet

Transcript

  1. Python Uma análise da linguagem e seu ecossistema

  2. 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", }, }
  3. 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
  4. Características da linguagem • Orientada a objetos • Imperativa •

    Funcional • Dinamicamente tipada • Fortemente tipada • Duck Typing • Metaprogramação • Gerenciamento de memória • Interpretada
  5. 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
  6. 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)
  7. Vantagens • Popularidade • Comunidade • Fácil e elegante •

    Produtiva • Poderosa
  8. 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
  9. Talk is cheap. Show me the code.

  10. Hello World! print("Hello, I'm Python!")

  11. Fibonacci def fib(n): a, b = 0, 1 while a

    < n: print(a, end=' ') a, b = b, a+b print() fib(1000)
  12. 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')
  13. Python 3

  14. 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
  15. É mais usado Fonte: https://www.jetbrains.com/research/python-developers-survey-2017/

  16. É mais rápido Fonte: https://speed.python.org/comparison/

  17. 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
  18. Estatísticas

  19. 2ª linguagem mais popular no GitHub Fonte: https://octoverse.github.com/

  20. Utilização por categoria Fonte: https://www.jetbrains.com/research/python-developers-survey-2017/

  21. Bibliotecas/Frameworks mais utilizados Fonte: https://www.jetbrains.com/research/devecosystem-2018/python/

  22. Python é mais usado para Data Science e Machine Learning

    do que para Web
  23. Python para Web

  24. 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
  25. 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
  26. 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
  27. 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
  28. Sanic • Flask like • Async requests • Python 3.5+

    (asyncio/uvloop) • Possui Web Server interno ▄▄▄▄▄ ▀▀▀██████▄▄▄ _______________ ▄▄▄▄▄ █████████▄ / \ ▀▀▀▀█████▌ ▀▐▄ ▀▐█ | Gotta go fast! | ▀▀█████▄▄ ▀██████▄██ | _________________/ ▀▄▄▄▄▄ ▀▀█▄▀█════█▀ |/ ▀▀▀▄ ▀▀███ ▀ ▄▄ ▄███▀▀██▄████████▄ ▄▀▀▀▀▀▀█▌ ██▀▄▄▄██▀▄███▀ ▀▀████ ▄██ ▄▀▀▀▄██▄▀▀▌████▒▒▒▒▒▒███ ▌▄▄▀ ▌ ▐▀████▐███▒▒▒▒▒▐██▌ ▀▄▄▄▄▀ ▀▀████▒▒▒▒▄██▀ ▀▀█████████▀ ▄▄██▀██████▀█ ▄██▀ ▀▀▀ █ ▄█ ▐▌ ▄▄▄▄█▌ ▀█▄▄▄▄▀▀▄ ▌ ▐ ▀▀▄▄▄▀ ▀▀▄▄▀
  29. 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
  30. Outros frameworks • Full Stack Frameworks ◦ TurboGears ◦ Web2py

    • Micro Frameworks ◦ CherryPy ◦ Falcon ◦ Pyramid • CMS ◦ Django CMS ◦ Mezzanine ◦ Wagtail • Wiki Engine ◦ MoinMoin
  31. Python para Data Science

  32. 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
  33. 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
  34. 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
  35. 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
  36. Python para Machine Learning

  37. 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
  38. 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
  39. Python para Deep Learning

  40. Keras • API de alto nível para redes neurais •

    Prototipação rápida • Suporta CNNs e RNNs • Suporta múltiplos backends ◦ TensorFlow ◦ Theano ◦ CNTK
  41. 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
  42. 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
  43. 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
  44. Python para Visão Computacional

  45. 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
  46. SimpleCV • Framework para Visão Computacional em cima do OpenCV

    • Mais simples e intuitivo que o OpenCV • Possui shell interativo
  47. 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
  48. Python além da Web e Data Science

  49. Web Crawling • Scrapy • PySpider • Parsel • BeatifulSoup

    • MechanicalSoup • Requests • lxml
  50. Desenvolvimento de jogos • PyGame • Pyglet • Kivy •

    Panda3D • PyOpenGL
  51. Desenvolvimento Mobile • BeeWare • Kivy

  52. Desenvolvimento Desktop • PyQt • PySide • PyGTK • TKinter

    • WxPython
  53. Ferramentas para Python

  54. Anaconda • Gerenciador de pacotes • Gerenciador de ambientes •

    Distribuição Python • Alternativa ao pip e pyenv
  55. 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
  56. IPython • Shell interativo poderoso • Um kernel do Jupyter

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

  58. Obrigado