SlideShare uma empresa Scribd logo
1 de 9
Python, CPython, Pythonico, Cython?
Pythonico é estar obstinado na construção aprimorada de
sistemas informáticos tendo como base uma guia de estilos. Essa
guia de estilo chama-se PEP-81
. Pythonico é um termo derivado
de Python2, ou seja, a descrição de uma linguagem de
programação de auto nível, multi uso3 para: web, desktops,
servers e dispositivos embarcados; interpretada e com a
possibilidade de gerar arquivos compilados, criada por Guido Van
Rossum. CPython4
é a implementação original do Python. É a
implementação que você baixa do www.python.org. Trata-se de
uma linguagem com forte filosofia onde o desenvolvimento ágil,
a rápida leitura e a interpretação do código pelos seres humanos
são fatores fundamentais em comparação a outras linguagens de
programação. Além de uma grande capacidade de interagir
facilmente com C/C++
Veja alguns exemplos nos códigos Python abaixo (esses
códigos executam a mesma coisa com desempenho diferente).
Ruim: Bom(LBYL): Aindamelhor(EAFP):
try:
if plano == True: if plano: try:
executar_plano() executar_plano() executar_plano()
ou except Exception as e: except Exception as e:
if plano != None: … ...
executar_plano() finally: finally:
… …
1
https://www.python.org/dev/peps/pep-0008/
2
http://www.python.org
3
http://spectrum.ieee.org/computing/software/the-2016-top-programming-languages
4
http://stackoverflow.com/questions/17130975/python-vs-cpython
Você percebeu como é fácil ler o código do bloco do meio e
o bloco à direita? O quão rápido a CPU irá executar o código
assim estruturado com milhares de instruções em construção
aprimorada?
“Deve haver uma - e preferivelmente apenas uma -
maneira óbvia de fazer algo”5
.
A partir deste ponto o conhecimento em tecnologia de
software se faz necessário o que torna a leitura um tanto densa e
difícil. O bloco da direita acima é conhecido como: EAFP (It's
easier to ask forgiveness than permission). O bloco do meio é
conhecido como: LBYL (Look before you leap). Dessa forma, o
EAFP remete a "é mais fácil pedir perdão do que permissão". Isso
significa que em termos de desempenho dos sistemas
informáticos é preferível capturar exceções a testar atributos
com if antes de usá-los. Nos blocos lógicos acima não tem
chaves, parênteses, colchetes, ponto, ponto e virgula, fecha if,
etc. É só isso, a identação, ou seja, o recuo do texto em relação a
sua margem instrui o processamento. O except precisa do try e o
try não tem a pretensão de substituir o if.
O comando with, seguindo a filosofia agile, irá fechar
automaticamente o arquivo aberto, mesmo que uma exceção
ocorra dentro do bloco lógico (este é um exemplo prático do que
é a filosofia agile aplicado a programação de software).
Ruim: Muito Bom:
f = open('file.txt' encoding=”utf-8”) with open('file.txt', ‘r’ encoding=”utf-8”) as f:
5
https://www.python.org/dev/peps/pep-0020/
a = f.read() for linein f:
print(a) print(line)
f.close()
O extrato de código Python abaixo lê um arquivo em
formato texto localizado no filesystem, obtendo os 10 primeiros
bytes que se refere a um nome, sendo posteriormente gerado
um arquivo com os nomes ordenados e distintos, ou seja, únicos.
exist = set()
with open(filename, 'r'encoding=”utf-8”) as r:
with open(filename + '.out', 'w', encoding=”utf-8”) as w:
for line in sorted(r):
nome = line[0:10].strip()
if nome not in exist:
if nome != 'UID':
w.write(nome)
w.write('n')
exist.add(nome)
Neste extrato de código o resultado do arquivo gerado é exibido
em tela.
with open(filename + '.out', 'r', encoding=”utf-8”) as r:
for line in r:
print (line, end="")
Alto desempenho com Cython
"Cython é o elo perdido entre a simplicidade do Python e a
velocidade do C/C++" Stefan Behnel. Fato que se traduz em um
cenário ganha-ganha.
Cython é uma ferramenta para:
 Converter código Python para código C
 Acelerar os módulos Python existentes, não reescreva!
 Chamar códigos C apartir do Python
O Cython faz algumas conversões que utilizam menor
quantidade de chamadas ao interpretador Python. Dessa forma,
o ganho em desempenho é alcançado.
Veja os exemplos abaixo rodando para o seguinte código:
# -*- coding: utf-8 -*-
import time
start_time = time.time()
for i in range(999999999):
pass
print ('Início={0}, Fim={1}, Tempo={2}s segundos'.format(start_time, time.time(),
time.time() - start_time))
Ubuntu Desktop v. 16.04 32bits com gcc v. 5.4.0 (Dual core 1.66Ghz):
Python v. 3.5.2 Cython v. 0.266
for i in range(999999999) for (i=0; i<999999999; i++)
166.75153851509094 s 139.28135538101196 s
Python v. 2.7.12 Cython v. 0.267
for i in range(999999999) for (i=0; i<999999999; i++)
Memory Error Memory Error
*************
Ubuntu Server v. 17.04 64bits (GNU/Linux 4.10.0-32-generic x86_64) com gcc v.
6.3.0 (Micro instance AWS, 1vCPU, 0,6GB Memory):
Python v. 3.5.3 Cython v. 0.268
for i in range(999999999) for (i=0; i<999999999; i++)
104.71606087684631 s 60.71505284309387 s
Python v. 2.7.13 Cython v. 0.269
for i in range(999999999) for (i=0; i<999999999; i++)
Memory Error Memory Error
6
CompiladobaseadoemPython-3(sintaxee semânticade códigos)
7
CompialdobaseadoemPython-2(sintaxee semânticade códigos)
8
CompiladobaseadoemPython-3(sintaxee semânticade códigos)
9
CompiladobaseadoemPython-2(sintaxee semânticade códigos)
*************
Raspbian v. 4.14.98 32bits com gcc v. 6.3.0 (Raspberry Pi 3 B+), Cython v. 0.29.7
Python v. 3.5.3 Cython v. 0.2610
for i in range(999999999) for (i=0; i<999999999; i++)
378.1542239189148s s 289.6118428707123 s
Python v. 2.7.13 Cython v. 0.2611
for i in range(999999999) for (i=0; i<999999999; i++)
Memory Error 289.6118428707123 s
10
CompiladobaseadoemPython-3(sintaxee semânticade códigos)
11
CompiladobaseadoemPython-2(sintaxee semânticade códigos)
Cython na pratica
$ cat olamundo.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
print ("Olá mundo")
$ python3 olamundo.py
Olá mundo
$ cython --embed olamundo.py -3
$ gcc -Os -I /usr/include/python3.5m -o olamundo olamundo.c -
lpython3.5m -lpthread -lm -lutil -ldl
$ ls -la olamundo*
-rwxrwxr-x. 1 marcos marcos 18368jan 18 20:14 olamundo
-rw-rw-r--. 1 marcos marcos 78047jan 18 20:13 olamundo.c
-rw-rw-r--. 1 marcos marcos 68 jan 18 20:10 olamundo.py
$ ./olamundo
Olá mundo
Perceba o tamanho dos arquivos. É possível executar um
arquivo Python com 68 bytes. Diferentemente de um arquivo
executável que possui 18368 bytes. Esse fato não significa que
um é melhor e o outro pior, mas responder a seguinte questão:
Qual opção é a mais indicada as características do meu projeto?
Qual o objetivo?
Escrever código eficiente em Python, aproveitando as suas
características otimizadas, bem como baseado na guia de estilos
da PEP-8 (Pythonico) e quando for necessário forte desempenho,
utilizar o Cython como uma das opções disponíveis, entre outras,
usadas separadas ou em conjunto.
O Python é mais lento quando comparado com C/C++.
Entretanto, o Python faz um bom trabalho quando comparado
com outras linguagens da sua categoria, como: Java, JavaScript,
Perl, Tcl, ou Smalltalk.
O core de desenvolvimento do Python é muito poderoso e
atuante e a linguagem está evoluindo fortemente, rotinas que
aproveitam os modernos processadores com vários núcleos de
processamento estão disponibilizadas na linguagem com forte
inovação, versão após versão do software. Um trabalho incrível
está sendo feito.
Marcos Aurelio Barranco
21/01/2017
Atualizado em: 05/05/2019
Fontes:
Effective Python 59 specific ways to write better Python by Brett Slatkin
Python Cookbook Third Edition by David Beazley and Brian K. Jones
The Hitchhiker’s Guide to Python by Kenneth Reitz
PEP 8 - Style Guide for Python Code - https://www.python.org/dev/peps/pep-0008/
PEP 20 - The Zen of Python - https://www.python.org/dev/peps/pep-0020/
Making Python run faster: a case study
http://faingezicht.com/articles/2016/12/25/means/
Comparing Python to Other Languages
https://www.python.org/doc/essays/comparisons/
Using the Cython Compiler to write fast Python code
http://www.behnel.de/cython200910/talk.html
Why is Python so popular despite being so slow?
https://www.quora.com/Why-is-Python-so-popular-despite-being-so-slow
What are differences between multithreading, multiprocessing and asyncio in Python?
https://www.quora.com/What-are-differences-between-multithreading-multiprocessing-and-asyncio-
in-Python
5 Reasons why Python is Powerful Enough for Google
https://www.codefellows.org/blog/5-reasons-why-python-is-powerful-enough-for-google/

Mais conteúdo relacionado

Mais procurados

Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e TkCarlos Campani
 
Por Que Python É Tão Lento?
Por Que Python É Tão Lento?Por Que Python É Tão Lento?
Por Que Python É Tão Lento?Rudá Moura
 
Conhencendo Python e por que ela importa?
Conhencendo Python e por que ela importa?Conhencendo Python e por que ela importa?
Conhencendo Python e por que ela importa?Marcel Caraciolo
 
Projeto para a faculdade? Canivete Python resolve!
Projeto para a faculdade? Canivete Python resolve!Projeto para a faculdade? Canivete Python resolve!
Projeto para a faculdade? Canivete Python resolve!Guilherme Medeiros
 
Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven Developmentpugpe
 
Aprenda a programar python
Aprenda a programar pythonAprenda a programar python
Aprenda a programar pythonLourenço Junior
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoWeldir Fernando Dias
 
Introdução à linguagem de programação Python
Introdução à linguagem de programação PythonIntrodução à linguagem de programação Python
Introdução à linguagem de programação PythonCarlos Schults
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do GoogleLuciano Ramalho
 
Estrutura de Programas
Estrutura de ProgramasEstrutura de Programas
Estrutura de ProgramasSidney Roberto
 
Trabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonTrabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonRicardo Zalla
 

Mais procurados (18)

Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e Tk
 
Por Que Python É Tão Lento?
Por Que Python É Tão Lento?Por Que Python É Tão Lento?
Por Que Python É Tão Lento?
 
Conhencendo Python e por que ela importa?
Conhencendo Python e por que ela importa?Conhencendo Python e por que ela importa?
Conhencendo Python e por que ela importa?
 
Python 3k
Python 3kPython 3k
Python 3k
 
Projeto para a faculdade? Canivete Python resolve!
Projeto para a faculdade? Canivete Python resolve!Projeto para a faculdade? Canivete Python resolve!
Projeto para a faculdade? Canivete Python resolve!
 
Python para Programadores
Python para ProgramadoresPython para Programadores
Python para Programadores
 
Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven Development
 
Aprenda a programar python
Aprenda a programar pythonAprenda a programar python
Aprenda a programar python
 
Curso Python - Aula 01
Curso Python - Aula 01Curso Python - Aula 01
Curso Python - Aula 01
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalho
 
Introdução à linguagem de programação Python
Introdução à linguagem de programação PythonIntrodução à linguagem de programação Python
Introdução à linguagem de programação Python
 
Canivete python
Canivete pythonCanivete python
Canivete python
 
Hello, Python!
Hello, Python!Hello, Python!
Hello, Python!
 
Canivete suíço do Python
Canivete suíço do PythonCanivete suíço do Python
Canivete suíço do Python
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do Google
 
Estrutura de Programas
Estrutura de ProgramasEstrutura de Programas
Estrutura de Programas
 
Trabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonTrabalho sobre a linguagem Python
Trabalho sobre a linguagem Python
 
Python WTFAQ?
Python WTFAQ?Python WTFAQ?
Python WTFAQ?
 

Semelhante a Python, CPython, Pythonico, Cython

Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsHelio Colombe
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação PythonJunior Sobrenome
 
Python Training #1 ed.6
Python Training #1 ed.6 Python Training #1 ed.6
Python Training #1 ed.6 Fabio Spanhol
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoandreluizlugon
 
Python Training #1 - ed5
Python Training #1 - ed5Python Training #1 - ed5
Python Training #1 - ed5Fabio Spanhol
 
Python Training #1, ed. 6
Python Training #1, ed. 6Python Training #1, ed. 6
Python Training #1, ed. 6Fabio Spanhol
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoFelipeDi
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 pythonTiago
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução PythonGleison Rodrigues
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webAlvaro Oliveira
 
The zen of python 2010
The zen of python 2010The zen of python 2010
The zen of python 2010Luiz Aldabalde
 
python_para_desenvolvedores.pdf
python_para_desenvolvedores.pdfpython_para_desenvolvedores.pdf
python_para_desenvolvedores.pdfProfIvanSaboia
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonAlvaro Oliveira
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoUbirajara Cavaco
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonFlávio Ribeiro
 
Python Training #1 - ed4
Python Training #1 - ed4Python Training #1 - ed4
Python Training #1 - ed4Fabio Spanhol
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Pythonrodrigopex
 

Semelhante a Python, CPython, Pythonico, Cython (20)

Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - Português
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação Python
 
Python Training #1 ed.6
Python Training #1 ed.6 Python Training #1 ed.6
Python Training #1 ed.6
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalho
 
Python Training #1 - ed5
Python Training #1 - ed5Python Training #1 - ed5
Python Training #1 - ed5
 
Python Training #1, ed. 6
Python Training #1, ed. 6Python Training #1, ed. 6
Python Training #1, ed. 6
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalho
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 python
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução Python
 
Apostila_IC.pdf
Apostila_IC.pdfApostila_IC.pdf
Apostila_IC.pdf
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações web
 
The zen of python 2010
The zen of python 2010The zen of python 2010
The zen of python 2010
 
python_para_desenvolvedores.pdf
python_para_desenvolvedores.pdfpython_para_desenvolvedores.pdf
python_para_desenvolvedores.pdf
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalho
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando Python
 
Python Training #1 - ed4
Python Training #1 - ed4Python Training #1 - ed4
Python Training #1 - ed4
 
Python tutorial-ed3
Python tutorial-ed3Python tutorial-ed3
Python tutorial-ed3
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 

Mais de Marcos Aurelio Barranco

Impressoes apos 2 dias utilizando o ubuntu io t com raspberry pi
Impressoes apos 2 dias utilizando o ubuntu io t com raspberry piImpressoes apos 2 dias utilizando o ubuntu io t com raspberry pi
Impressoes apos 2 dias utilizando o ubuntu io t com raspberry piMarcos Aurelio Barranco
 
Group by and order by desc with python pandas
Group by and order by desc with python pandasGroup by and order by desc with python pandas
Group by and order by desc with python pandasMarcos Aurelio Barranco
 
Impressões após 5 dias utilizando o Raspberry Pi 3 B+ como um computador resi...
Impressões após 5 dias utilizando o Raspberry Pi 3 B+ como um computador resi...Impressões após 5 dias utilizando o Raspberry Pi 3 B+ como um computador resi...
Impressões após 5 dias utilizando o Raspberry Pi 3 B+ como um computador resi...Marcos Aurelio Barranco
 
Compile and install MongoDB v. 3.2.12 on Raspbian 32 bits with Raspberry PI 3 B+
Compile and install MongoDB v. 3.2.12 on Raspbian 32 bits with Raspberry PI 3 B+Compile and install MongoDB v. 3.2.12 on Raspbian 32 bits with Raspberry PI 3 B+
Compile and install MongoDB v. 3.2.12 on Raspbian 32 bits with Raspberry PI 3 B+Marcos Aurelio Barranco
 

Mais de Marcos Aurelio Barranco (12)

Criatividade na solução de problemas
Criatividade na solução de problemasCriatividade na solução de problemas
Criatividade na solução de problemas
 
Python e Golang - Parte 2
Python e Golang - Parte 2Python e Golang - Parte 2
Python e Golang - Parte 2
 
Python e Golang - Parte 1
Python e Golang - Parte 1Python e Golang - Parte 1
Python e Golang - Parte 1
 
Impressoes apos 2 dias utilizando o ubuntu io t com raspberry pi
Impressoes apos 2 dias utilizando o ubuntu io t com raspberry piImpressoes apos 2 dias utilizando o ubuntu io t com raspberry pi
Impressoes apos 2 dias utilizando o ubuntu io t com raspberry pi
 
Group by and order by desc with python pandas
Group by and order by desc with python pandasGroup by and order by desc with python pandas
Group by and order by desc with python pandas
 
Impressões após 5 dias utilizando o Raspberry Pi 3 B+ como um computador resi...
Impressões após 5 dias utilizando o Raspberry Pi 3 B+ como um computador resi...Impressões após 5 dias utilizando o Raspberry Pi 3 B+ como um computador resi...
Impressões após 5 dias utilizando o Raspberry Pi 3 B+ como um computador resi...
 
O hábito saudável de correr
O hábito saudável de correrO hábito saudável de correr
O hábito saudável de correr
 
Como instalar o IRPF no Linux
Como instalar o IRPF no LinuxComo instalar o IRPF no Linux
Como instalar o IRPF no Linux
 
Saindo da caixa para criar e inovar
Saindo da caixa para criar e inovarSaindo da caixa para criar e inovar
Saindo da caixa para criar e inovar
 
Coaching e a carruagem
Coaching e a carruagemCoaching e a carruagem
Coaching e a carruagem
 
Criatividade e inovacao
Criatividade e inovacaoCriatividade e inovacao
Criatividade e inovacao
 
Compile and install MongoDB v. 3.2.12 on Raspbian 32 bits with Raspberry PI 3 B+
Compile and install MongoDB v. 3.2.12 on Raspbian 32 bits with Raspberry PI 3 B+Compile and install MongoDB v. 3.2.12 on Raspbian 32 bits with Raspberry PI 3 B+
Compile and install MongoDB v. 3.2.12 on Raspbian 32 bits with Raspberry PI 3 B+
 

Python, CPython, Pythonico, Cython

  • 1. Python, CPython, Pythonico, Cython? Pythonico é estar obstinado na construção aprimorada de sistemas informáticos tendo como base uma guia de estilos. Essa guia de estilo chama-se PEP-81 . Pythonico é um termo derivado de Python2, ou seja, a descrição de uma linguagem de programação de auto nível, multi uso3 para: web, desktops, servers e dispositivos embarcados; interpretada e com a possibilidade de gerar arquivos compilados, criada por Guido Van Rossum. CPython4 é a implementação original do Python. É a implementação que você baixa do www.python.org. Trata-se de uma linguagem com forte filosofia onde o desenvolvimento ágil, a rápida leitura e a interpretação do código pelos seres humanos são fatores fundamentais em comparação a outras linguagens de programação. Além de uma grande capacidade de interagir facilmente com C/C++ Veja alguns exemplos nos códigos Python abaixo (esses códigos executam a mesma coisa com desempenho diferente). Ruim: Bom(LBYL): Aindamelhor(EAFP): try: if plano == True: if plano: try: executar_plano() executar_plano() executar_plano() ou except Exception as e: except Exception as e: if plano != None: … ... executar_plano() finally: finally: … … 1 https://www.python.org/dev/peps/pep-0008/ 2 http://www.python.org 3 http://spectrum.ieee.org/computing/software/the-2016-top-programming-languages 4 http://stackoverflow.com/questions/17130975/python-vs-cpython
  • 2. Você percebeu como é fácil ler o código do bloco do meio e o bloco à direita? O quão rápido a CPU irá executar o código assim estruturado com milhares de instruções em construção aprimorada? “Deve haver uma - e preferivelmente apenas uma - maneira óbvia de fazer algo”5 . A partir deste ponto o conhecimento em tecnologia de software se faz necessário o que torna a leitura um tanto densa e difícil. O bloco da direita acima é conhecido como: EAFP (It's easier to ask forgiveness than permission). O bloco do meio é conhecido como: LBYL (Look before you leap). Dessa forma, o EAFP remete a "é mais fácil pedir perdão do que permissão". Isso significa que em termos de desempenho dos sistemas informáticos é preferível capturar exceções a testar atributos com if antes de usá-los. Nos blocos lógicos acima não tem chaves, parênteses, colchetes, ponto, ponto e virgula, fecha if, etc. É só isso, a identação, ou seja, o recuo do texto em relação a sua margem instrui o processamento. O except precisa do try e o try não tem a pretensão de substituir o if. O comando with, seguindo a filosofia agile, irá fechar automaticamente o arquivo aberto, mesmo que uma exceção ocorra dentro do bloco lógico (este é um exemplo prático do que é a filosofia agile aplicado a programação de software). Ruim: Muito Bom: f = open('file.txt' encoding=”utf-8”) with open('file.txt', ‘r’ encoding=”utf-8”) as f: 5 https://www.python.org/dev/peps/pep-0020/
  • 3. a = f.read() for linein f: print(a) print(line) f.close() O extrato de código Python abaixo lê um arquivo em formato texto localizado no filesystem, obtendo os 10 primeiros bytes que se refere a um nome, sendo posteriormente gerado um arquivo com os nomes ordenados e distintos, ou seja, únicos. exist = set() with open(filename, 'r'encoding=”utf-8”) as r: with open(filename + '.out', 'w', encoding=”utf-8”) as w: for line in sorted(r): nome = line[0:10].strip() if nome not in exist: if nome != 'UID': w.write(nome) w.write('n') exist.add(nome) Neste extrato de código o resultado do arquivo gerado é exibido em tela. with open(filename + '.out', 'r', encoding=”utf-8”) as r: for line in r: print (line, end="")
  • 4. Alto desempenho com Cython "Cython é o elo perdido entre a simplicidade do Python e a velocidade do C/C++" Stefan Behnel. Fato que se traduz em um cenário ganha-ganha. Cython é uma ferramenta para:  Converter código Python para código C  Acelerar os módulos Python existentes, não reescreva!  Chamar códigos C apartir do Python O Cython faz algumas conversões que utilizam menor quantidade de chamadas ao interpretador Python. Dessa forma, o ganho em desempenho é alcançado. Veja os exemplos abaixo rodando para o seguinte código: # -*- coding: utf-8 -*- import time start_time = time.time() for i in range(999999999): pass print ('Início={0}, Fim={1}, Tempo={2}s segundos'.format(start_time, time.time(), time.time() - start_time))
  • 5. Ubuntu Desktop v. 16.04 32bits com gcc v. 5.4.0 (Dual core 1.66Ghz): Python v. 3.5.2 Cython v. 0.266 for i in range(999999999) for (i=0; i<999999999; i++) 166.75153851509094 s 139.28135538101196 s Python v. 2.7.12 Cython v. 0.267 for i in range(999999999) for (i=0; i<999999999; i++) Memory Error Memory Error ************* Ubuntu Server v. 17.04 64bits (GNU/Linux 4.10.0-32-generic x86_64) com gcc v. 6.3.0 (Micro instance AWS, 1vCPU, 0,6GB Memory): Python v. 3.5.3 Cython v. 0.268 for i in range(999999999) for (i=0; i<999999999; i++) 104.71606087684631 s 60.71505284309387 s Python v. 2.7.13 Cython v. 0.269 for i in range(999999999) for (i=0; i<999999999; i++) Memory Error Memory Error 6 CompiladobaseadoemPython-3(sintaxee semânticade códigos) 7 CompialdobaseadoemPython-2(sintaxee semânticade códigos) 8 CompiladobaseadoemPython-3(sintaxee semânticade códigos) 9 CompiladobaseadoemPython-2(sintaxee semânticade códigos)
  • 6. ************* Raspbian v. 4.14.98 32bits com gcc v. 6.3.0 (Raspberry Pi 3 B+), Cython v. 0.29.7 Python v. 3.5.3 Cython v. 0.2610 for i in range(999999999) for (i=0; i<999999999; i++) 378.1542239189148s s 289.6118428707123 s Python v. 2.7.13 Cython v. 0.2611 for i in range(999999999) for (i=0; i<999999999; i++) Memory Error 289.6118428707123 s 10 CompiladobaseadoemPython-3(sintaxee semânticade códigos) 11 CompiladobaseadoemPython-2(sintaxee semânticade códigos)
  • 7. Cython na pratica $ cat olamundo.py #!/usr/bin/env python3 # -*- coding: utf-8 -*- print ("Olá mundo") $ python3 olamundo.py Olá mundo $ cython --embed olamundo.py -3 $ gcc -Os -I /usr/include/python3.5m -o olamundo olamundo.c - lpython3.5m -lpthread -lm -lutil -ldl $ ls -la olamundo* -rwxrwxr-x. 1 marcos marcos 18368jan 18 20:14 olamundo -rw-rw-r--. 1 marcos marcos 78047jan 18 20:13 olamundo.c -rw-rw-r--. 1 marcos marcos 68 jan 18 20:10 olamundo.py $ ./olamundo Olá mundo Perceba o tamanho dos arquivos. É possível executar um arquivo Python com 68 bytes. Diferentemente de um arquivo executável que possui 18368 bytes. Esse fato não significa que um é melhor e o outro pior, mas responder a seguinte questão: Qual opção é a mais indicada as características do meu projeto?
  • 8. Qual o objetivo? Escrever código eficiente em Python, aproveitando as suas características otimizadas, bem como baseado na guia de estilos da PEP-8 (Pythonico) e quando for necessário forte desempenho, utilizar o Cython como uma das opções disponíveis, entre outras, usadas separadas ou em conjunto. O Python é mais lento quando comparado com C/C++. Entretanto, o Python faz um bom trabalho quando comparado com outras linguagens da sua categoria, como: Java, JavaScript, Perl, Tcl, ou Smalltalk. O core de desenvolvimento do Python é muito poderoso e atuante e a linguagem está evoluindo fortemente, rotinas que aproveitam os modernos processadores com vários núcleos de processamento estão disponibilizadas na linguagem com forte inovação, versão após versão do software. Um trabalho incrível está sendo feito. Marcos Aurelio Barranco 21/01/2017 Atualizado em: 05/05/2019
  • 9. Fontes: Effective Python 59 specific ways to write better Python by Brett Slatkin Python Cookbook Third Edition by David Beazley and Brian K. Jones The Hitchhiker’s Guide to Python by Kenneth Reitz PEP 8 - Style Guide for Python Code - https://www.python.org/dev/peps/pep-0008/ PEP 20 - The Zen of Python - https://www.python.org/dev/peps/pep-0020/ Making Python run faster: a case study http://faingezicht.com/articles/2016/12/25/means/ Comparing Python to Other Languages https://www.python.org/doc/essays/comparisons/ Using the Cython Compiler to write fast Python code http://www.behnel.de/cython200910/talk.html Why is Python so popular despite being so slow? https://www.quora.com/Why-is-Python-so-popular-despite-being-so-slow What are differences between multithreading, multiprocessing and asyncio in Python? https://www.quora.com/What-are-differences-between-multithreading-multiprocessing-and-asyncio- in-Python 5 Reasons why Python is Powerful Enough for Google https://www.codefellows.org/blog/5-reasons-why-python-is-powerful-enough-for-google/