要了解Brython的工作原理,首先需要使用我们首选的方法安装Brython,我们在“如何安装Brython文章”中已经讨论过。

在讨论Brython的工作原理之前,我们应该知道以下几点:

  • 如何在JavaScript中实现Python
  • 如何将Python翻译成JavaScript,以及在浏览器中执行时的运行方式。
  • JavaScript文件的两个主要库:

    • brython_stdlib.js,Brython的标准库
    • brython.js,Brython语言的核心
  • 如何调用brython(),它将编译存储在文本/Python类型的脚本标签中的Python程序。

在本文中,我们将讨论Brython的核心组件、标准库以及它的工作原理。

Brython的核心组件

brython.js和brython.min.js(Brython引擎的缩小版本)包含了Brython的核心组件。它们都包含以下关键组件:

  • BRYTHON: 这是JavaScript全局对象,它包含了运行Python脚本所需的所有内部对象。当我们编写Brython应用程序时,不会直接使用_BRYTHON_。如果我们查看Brython程序,包括Python和JavaScript,然后注意到_BRYTHON_的常规出现。我们不需要使用这个对象,但当我们在浏览器控制台中看到错误或想要调试程序时,我们应该意识到它的存在。
  • Brython(): 这是在JavaScript全局命名空间中公开的主要JavaScript函数。我们不能在不显式调用此函数的情况下执行任何Python程序。这是唯一需要显式调用的JavaScript函数。
  • 浏览器: 这是浏览器的模块,公开了前端网站应用程序中常用的JavaScript对象,如文档对象模型接口用于文档,窗口对象用于浏览器窗口等。
  • 内置类型: 这些是JavaScript中Python内置类型的实现。例如,py_dicts.js、py_string.js和py_int.js分别是dict、str和int的实现。

Brython标准库

在了解了核心Brython文件brython.js的内容之后,现在让我们学习它的伴随文件brython_stdlib.js。

Brython_stdlib.js公开了Python标准库。在生成brython_stdlib.js文件后,Brython可以将Python标准库编译成JavaScript并将结果链接到包brython_stdlib.js中。

Brython应该接近CPython,即Python的首选实现。由于Brython在网站浏览器的上下文中运行,它具有一些限制,例如浏览器不允许直接访问文件系统,因此os.open()函数不能打开文件。与网站浏览器无关的函数无法实现。

例如:

在Brython环境中运行以下代码:

import os  
os.unlink() 

输出:

TypeError                                 Traceback (most recent call last)
<ipython-input-1-85e82a7fc62f> in <module>
      1 import os
----> 2 os.unlink()

TypeError: unlink() missing required argument 'path' (pos 1)

在上面的代码中,os.unlink()引发异常,因为它不安全地从浏览器环境中删除本地文件,而File and Directories Entries API只是一个默认提案。

Brython仅支持本机Python模块。它不支持使用C编写的Python内置模块,除非它们已经在JavaScript中重新实现。例如,hashlib模块是用C编写的,而在Brython中是用JavaScript实现的。用户和开发人员还可以查看Brython分发中的模块列表,以比较CPython实现。

用户需要包含brython_stdlib.js和brython_stdlib.min.js以导入Python标准库中的模块。

Brython的工作原理

现在,让我们看看Brython如何在只知道JavaScript引擎的浏览器中工作。我们将使用一个示例和浏览器中可用的工具来了解在浏览器中执行Python代码涉及的过程。

例如:

<!doctype html>  
<html>  
  <head>  
    <script  
      src = "https://raw.githack.com/brython-dev/brython/master/www/src/brython.js">  
    </script>  
  </head>  
  <body onload = "brython()">  
    <script type = "text/python">  
      import browser  
      browser.alert("Hello Javatiku!")  
    </script>  
  </body>  
</html>

在加载和解析HTML页面后,brython()将执行以下步骤:

  1. 它将读取存储在元素<script type="text/python">中的Python程序。
  2. 然后编译Python程序以生成等效的JavaScript。
  3. 然后使用eval()评估生成的JavaScript代码。

例如:

将Python代码嵌入HTML文件中:

<script type = "text/python">  
  import browser  
  browser.alert("Hello Javatiku!")  
</script> 

第二个选项是从单独文件下载Python程序:

例如:

<head>  
    <script src = "https://www.forexample.com/main.py"  
            type = "text/python">  
    </script>  
</head>  

在上述情况下,Python文件将如下所示:

import browser  
browser.alert("Hello Javatiku?)  

将Python程序与HTML程序分开的过程更加清晰。这还允许用户充分利用代码编辑器的功能和好处。一些编辑器支持将JavaScript嵌入HTML,但不支持将Python嵌入HTML。

Brython的内部工作原理

在本文的这一部分中,我们将深入介绍如何将Python程序转化为JavaScript的过程。

为了说明这个过程,并了解Brython的内部工作原理,用户应按以下步骤操作:

  • 首先打开Brython的主页
  • 然后通过点击CTrl+shift+I(Windows和Linux操作系统)或CMD+ALT+I(Mac操作系统)来打开浏览器的控制台

在浏览器JavaScript的REPL中,用户应输入并执行以下命令:

例如:

eval(__BRYTHON__.python_to_js("import browser; browser.console.log('Hello Brython in Javatiku!')"));  

然后python_to_js()将解析并编译上述程序为JavaScript,然后在网站浏览器中执行JavaScript。用户将获得以下输出:

107.png

将eval()函数应用于Brython程序后,它将在浏览器的控制台中打印“Hello Brython in Javatiku!”。JavaScript的函数将返回undefined,这是JavaScript函数的默认返回值。

每当用户构建Brython应用程序时,都不需要在JavaScript模块_BRYTHON_中显式调用函数。上面的示例仅用于解释Brython如何在后台运行。

JavaScript _BRYTHON_对象也可在JavaScript全局范围内访问,用户可以使用浏览器JavaScript的控制台来访问它。

结论

在本文中,我们讨论并解释了Brython的核心组件和标准库,以及Brython在浏览器中的工作方式。我们还讨论了Brython的内部工作原理以及它如何在后台操作网站。

标签: Tkinter教程, Tkinter安装, Tkinter库, Tkinter入门, Tkinter学习, Tkinter入门教程, Tkinter, Tkinter进阶, Tkinter指南, Tkinter学习指南, Tkinter进阶教程, Tkinter编程