Para a satisfação de nossos leitores, nosso trabalho continua atualizando os livros de Python . Mas a busca continua nesta direção - e hoje gostaríamos de citar Brython - Python para navegadores. O artigo é curto, um pouco lúdico e detetive, procuramos manter o estilo do autor.
Este artigo fornece uma introdução rápida para trabalhar com Brython , uma implementação Python para desenvolvimento front-end (navegador).
Todo o projeto está postado aqui .
Introdução
Invejosos do sucesso dos programadores de JavaScript, os conspiradores do python se reuniram em segredo para discutir o futuro do Python neste mundo apocalíptico. JavaScript está em toda parte, consumindo a compensação do Python. Armado com o Node.js , o JavaScript invadiu o território do Python e perdeu seu papel dominante como a amada linguagem do lado do servidor, onde antes rivalizava com o Ruby ( lembra daqueles dias ?). Então é hora de fazer uma incursão no coração do território JavaScript: o navegador.
Não se esqueça da sua história (e lembre-se do futuro)
Este dilema não se limitou aos conspiradores mencionados. Havia outro cavaleiro de capa e punhal, o autor de Transcrypt . Ele decidiu escrever um compilador para Python que compila código direto para JavaScript. Como um bom envenenador, ele não deixou rastros de Python. Parecia promissor.
Outros preferiram aproveitar as aulas de história. Imigrar com toda a família. Pelo menos é assim que pensavam os criadores do Pyodide . Eles iriam criar um enclave no lado do JavaScript com um interpretador Python completo que pudesse executar o código Python. Da mesma forma, qualquer código Python pode ser executado lá , incluindo a maior parte de sua pilha para ciência de dados, onde há ligações para a linguagem C (por exemplo, Numpy, Pandas).
Também parece muito promissor. Mas os primeiros testes preguiçosos feitos pelo autor de Pyodide mostraram que a página estava carregando um pouco devagar no início.
Então, os conspiradores agiram exatamente no espírito de bons conspiradores: eles criaram um compilador diferente para converter Python em JavaScript, mas desta vez compilar para JavaScript no carregamento da página (não como Transcrypt, que compila o código para JavaScript com antecedência). A Irmandade Brython foi assim formada. Uma cobra para governar todos eles.
Olá Mundo
Vamos escrever o tradicional 'Hello World'
E aqui está o soldado Brython (estou falando sobre o compilador).
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/brython@3.8.9/brython.min.js">
</script>
<body onload="brython()">
...
</body>
Na tag
body
mostrada acima, escrevemos o código em Brython:
<script type="text/python">
from browser import document
document <= "Hello World"
</script>
Acabamos de adicionar Hello World ao elemento
document
. Hmm. Muito fácil.
Na íntegra - abaixo.
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/brython@3.8.8/brython.min.js">
</script>
</head>
<body onload="brython()">
<script type="text/python">
from browser import document
document <= "Hello World"
</script>
</body>
</html>
Neste caso, a página simplesmente exibirá a saudação “Hello World”.
Calculadora
Vamos escrever uma calculadora em Brython. Todo o seu código está postado aqui .
Sim, você adivinhou, precisamos de uma mesa. Vamos fazer isso.
from browser import document, html
calc = html.TABLE()
Vamos adicionar apenas a primeira linha. Ou seja, exibiremos o campo para números (vamos chamá-lo
result
) e a tecla C.
calc <= html.TR(html.TH(html.DIV("0", id="result"), colspan=3) +
html.TD("C"))
Sim, não tenho muita certeza sobre essa sintaxe com qualquer um
<=
. Mas, julgue por si mesmo, uma biblioteca tão legal, então eu concordo com isso.
Agora vamos adicionar o teclado
lines = ["789/", "456*", "123-", "0.=+"]
calc <= (html.TR(html.TD(x) for x in line) for line in lines)
Finalmente, adicione
calc
a
document
.
document <= calc
Então, até agora tudo bem. Como fazemos tudo isso funcionar? Primeiro, você precisa obter uma referência ao elemento de resultado para controlar quando as teclas são pressionadas.
result = document["result"] # id
Em seguida, precisamos atualizar
result
cada vez que qualquer elemento do teclado for pressionado. Para isso, vamos fazer um manipulador de eventos. Vamos confiar nos desenvolvedores do Brython e descobrir que esse código funciona. Preste atenção às manipulações
result
dependendo de qual botão você pressionou.
def action(event):
""" "click" ."""
# , , "target"
# event
element = event.target
# , , "text"
value = element.text
if value not in "=C":
#
if result.text in ["0", "error"]:
result.text = value
else:
result.text = result.text + value
elif value == "C":
#
result.text = "0"
elif value == "=":
#
try:
result.text = eval(result.text)
except:
result.text = "error"
Finalmente, vincule o manipulador de eventos acima a um evento
click
em todos os botões.
for button in document.select("td"):
button.bind("click", action)
Você vê como era simples. Mas, falando sério, Brython me parece uma obra-prima da engenharia e talvez a melhor ilustração do meu amor pela linguagem Python. Por favor, apoie os desenvolvedores e dê a eles um asterisco no repositório Github!