Brython——浏览器中执行的Python,用它教Python入门超级省事

 

图片

话说我们的学生嘟嘟小萌新,不懂太多计算机操作,却要开始学习Python了。

 

该不该学那是一个社会性的问题,谁都可以站在自己立场表示一下态度。

 

怎么让他们容易学、能学好则是一个技术性问题。教育者不得不面对,不得不思考这个问题。

 

一个最最最基础的问题:怎么让学生更容易地编写出第一行代码,让他们得到更快速的结果反馈

 

现有的解决方案有好多不如意的地方。

 

比如典型的成人学习,一上来就得装Python开发环境,真是不同操作系统不同的淚!

 

就算是用Jupyter Notebook,让学生只在网页端使用,也还得配置一下服务器

 

套用成人的这种办法教小朋友学Python,不好的地方在于:

 

安装编程环境是一个技术活,需要你自己或者找一个懂点的人提前给学生的电脑上安装。

 

这是一个人力成本问题,一般能安装好的人,那得身经百战才行,这工资得出啊!

 

还涉及一个信任问题,家长凭什么相信你全权控制他的电脑呢?

 

还有,万一折腾二三十分钟,没有安装好,那岂不是太尴尬?家长心里会怎么评价这老师?

 

真是费时费力又不讨喜

 

就算是线下机构自己为学生们提供电脑,安装保证每台电脑都能正常使用,是不是也要大费一番周折?

 

好了,我要是再不进入正题,怕你拿竹竿打人……

 

图片

 

到底怎么办?

 

请服一粒Brython,瞬间心旷神怡!

 

图片

初识Brython

 

请看Hello World:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hello World</title>
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/brython@3.8.9/brython.min.js"> </script>
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/brython@3.8.9/brython_stdlib.js"> </script>
</head>
<body onload="brython()">
    <script type="text/python">
        from browser import document
        document <= "Hello World!"
</script>
</body>
</html>

结果当然不出意料:

 

图片

在第11到14行之间,都是用Python语言写的代码。

 

或者你想要弹窗也没问题,只需要把这几行Python改为:

import browser
browser.alert("Hello Real Python!")

如果想要在Console中Debug,那么直接用print就好了。

print("Hello World!")

图片

Brython正常运行需要有几点:

 

1. brython.js,像其他js库一样调用就可以了。

<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/brython@3.8.9/brython.min.js"> </script>

2. 文档加载结束时,要调用brython()函数。

 <body onload="brython()">

3. 将script标签的语言类型设置为Python。

<script type="text/python">

brython()函数会把当前节点范围内带type="text/python"的script脚本都翻译为JavaScript执行。

 

简单的说,Brython就是一只披着Python皮的JavaScript

 

  • A Python implementation in JavaScript.

  • A Python to JavaScript translator and a runtime executing in the browser.


 

图片

Brython解析

 

刚才一开始的Hello World中,我们加载的第一个库是brython.js

 

brython.jsBrython核心组件库(Brython Core Components)。主要有这几个核心组件:

 

brython()函数

 

这是暴露给JavaScript命名空间的一个最主要的函数,也是唯一一个需要显示调用的一个JavaScript函数。

 

__BRYTHON__

 

这是一个JavaScript全局变量。它里面含有所有运行Python代码用的内部对象。我们写Brython代码时并不需要直接使用这个全局变量,只是在debug时见到不要太惊慌就行。

 

py_int.js, py_string.js, py_dict.js等

 

这些是JavaScript版的Python内置对象实现库,感兴趣可以打开看一看源代码。

 

browser

 

这是通常意义上用JavaScript交互的document和window对象的Python实现模块。

 


 

除了brython.js,还有另外一个库是brython_stdlib.js,它实现的是Brython标准库(Brython Standard Library)

 

Brython肯定不是我们在操作系统上安装的Python,但是在尽力做到跟CPython一致。

 

速度比起本地执行,确实是要差一点点!

 

浏览器环境下运行,也有不少限制。比如不能直接访问文件系统,不能使用os库等与浏览器环境不相关的库等。

 

但是,这些都不是问题。

 

让初学者以最简单的方式就能写出第一行代码这个问题上,我认为它是最佳的选择

 


 

有了Brython,你就可以使用Python语言来操作浏览器APIDOM了。

 

并且还有机会和已有的JS代码框架进行交互,合理利用已有的JS功能。

 

比如自己写了一段JS代码,想用Python读取它(其他JS全局变量也是一样调用):

<script type="text/javascript">
     function myMessageBox(name) {
       window.alert(`Hello ${name}!`);
     }
</script>
 <script type="text/python">
     from browser import window
     window.myMessageBox("Jon")
</script>

这里再看一个跟Vue.js交互的例子。


<!DOCTYPE html >
<html>
  <head>
    <meta charset="utf-8"/>
    <link
      rel="stylesheet"
      href="https://cdnjs.cloudflare.com/ajax/libs/pure/2.0.3/pure-min.min.css"/>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/3.0.2/vue.global.prod.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.9.0/brython.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.9.0/brython_stdlib.min.js"></script>
    <script src="main.py" type="text/python"></script>
    <style>
      body { padding: 30px; }
      [v-cloak] { visibility: hidden; }
</style>
  </head>

<body onload="brython(1)">
  <div id="app">
    <form class="pure-form" onsubmit="return false;">
      <fieldset>
        <legend>Hash Calculator</legend>
        <input type="text" v-model.trim="input_text"
               placeholder="Text to Encode" autocomplete="off"/>
        <select v-model="algo" v-cloak>
          <option v-for="name in algos" v-bind:value="name">

          </option>
        </select>
        <button @click="compute_hash" type="submit"
                class="pure-button pure-button-primary">Ok</button>
      </fieldset>
    </form>
    <p v-cloak></p>
  </div>
</body>

下面是main.py的代码:


from browser import alert, window
from javascript import this
import hashlib

hashes = {
    "sha-1": hashlib.sha1,
    "sha-256": hashlib.sha256,
    "sha-512": hashlib.sha512,
}

Vue = window.Vue

def compute_hash(evt):
    value = this().input_text
    if not value:
        alert("You need to enter a value")
        return
    hash_object = hashes[this().algo]()
    hash_object.update(value.encode())
    hex_value = hash_object.hexdigest()
    this().hash_value = hex_value

def created():
    for name in hashes:
        this().algos.append(name)
    this().algo = next(iter(hashes))

app = Vue.createApp(
    {
        "el": "#app",
        "created": created,
        "data": lambda _: {"hash_value": "", "algos": [], "algo": "", "input_text": ""},
        "methods": {"compute_hash": compute_hash},
    }
)

app.mount("#app")

这样的话,Brython跟某些游戏框架交互也是非常方便的了,而这正是Brython用于Python教学的魅力所在

 

当然不用说,Brython还能让前后端的开发都统一起来,有可能复用同样的代码片段

 

比如这段验证电话号码的代码,前后端都可以通用:


import re

def normalize_us_phone(phone: str) -> str:
    """Extract numbers and digits from a given phone number"""
    return re.sub(r"[^\da-zA-z]", "", phone)

def is_valid_us_phone(phone: str) -> bool:
    """Validate 10-digit phone number"""
    normalized_number = normalize_us_phone(phone)
    return re.match(r"^\d{10}$", normalized_number) is not None

这几点,也是Brython和Jupyter Notebook不太一样的地方。

 

有了这个,你既可以做成网站系统平台,供学生直接账号登录,又可以让他单机编辑,直接打开HTML文件。

 

图片

总结

图片

 

教育人的派别也是分明的。

 

比如我们就坚持认为,每一步呈现最简最相关的学习内容,提供最便利的材料和媒介,勾起学习兴趣,逐步引导提升,才是最重要的。

 

怎么让Python入门更简单?

 

基于Brython的Python入门教学,是一条路子。

 

 

参考资料:

https://realpython.com/brython-python-in-browser/

 

 

 

 

 

 

图片

与非学堂(codingclassonline)

一个专注青少年信息技术教育,探讨少儿编程的教与学,交流技巧、分享资源的公众号。

--------------------------------------

图片

 

与非学堂小程序

蓝桥杯测试、Bebras测试、文化测试……

 

 

进入公众号菜单,更多精彩……

喜欢就请分享、点赞和在看吧!

 

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《人工智能实践程——从Python入门到机器学习》是一本非常有价值的电子书。该书从Python编程语言入门开始,逐步引导读者了解人工智能的相关概念和知识,并介绍了如何使用Python进行人工智能的实践。 在这本电子书,作者通过简明的语言和实例来解释Python的基本语法和常用库,帮助读者快速上手Python编程。然后,逐步介绍了人工智能的基础知识,如神经网络、深度学习和机器学习等。读者可以通过书的实践项目,学习如何使用Python进行数据处理、特征提取、模型训练和结果评估等。 特别值得一提的是,该书在讲解算法和模型原理的同时,也加入了大量的实践示例和代码。读者可以通过实践项目,亲自动手实现和调试,加深对人工智能算法和技术的理解和掌握。 这本电子书的优点在于: 1. 清晰明了的语言和实例,易于理解和掌握。 2. 结合理论和实践,帮助读者建立起算法和模型的直观认知。 3. 丰富的实践项目和代码示例,帮助读者真正学会如何运用Python进行人工智能实践。 4. 概念讲解详尽,适合初学者学习,也可作为已有基础的读者进行实践项目的参考。 总之,这本电子书是一本很实用的程,对于想要学习人工智能并具备一定Python编程基础的读者来说,是一本值得推荐的指导书。读者可以通过该书学习到从Python入门到机器学习的全过程,并获得实际应用的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值