<学习笔记>从零开始自学Python-之-实用库篇(一)-pyscript

news2024/11/18 23:26:40

由Anaconda创建的PyScript是一项实验性的但很有前途的新技术,它使python运转时在支撑WebAssembly的浏览器中作为一种脚本言语运用。

每个现代常用的浏览器现在都支撑WebAssembly,这是许多言语(如C、C++和Rust)能够编译的高速运转时规范。Python的参考实现是用C言语编写的,一个早期项目Pyodide供给了Python运转时的WebAssembly移植。

不过,PyScript的方针是供给一个完好的浏览器环境,将Python作为一种网络脚本言语运转。它建立在Pyodide之上,但增加或加强了一些功用,如从规范库中导入模块、运用第三方导入、装备与文档目标模型(DOM)的双向交互,以及做许多其他在Python和JavaScript国际中有用的事情。

现在,PyScript仍然是一个原型和实验性项目。Anaconda 并不推荐在生产中运用它。但猎奇的用户能够在PyScript网站上测验一些比方,并运用可用的组件在浏览器中构建实验性的Python+JavaScript应用程序。

1、HelloWorld

PyScript的中心是一个单一的JavaScript include,你能够将其增加到网页中。

下面是一个PyScript版本的 “hello, world “:

<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
        <script defer src="https://pyscript.net/unstable/pyscript.js"></script>
    </head>
    <body>
<py-script output="out">
print("Hello world")
</py-script>
<div id="out"></div>
    </body>
</html>

head 文档中的script 标签加载了PyScript的中心功能。pyscript.css 样式表是可选的,但很有用。

Python代码被包含在自定义的py-script 标签中。请留意,代码应该按照Python的缩进常规进行格式化,否则将无法正常运转。假如你运用的编辑器能主动重新格式化HTML,请留意这一点;它可能会弄乱py-script 块的内容,使其无法运转。

一旦PyScript组件加载完毕,任何Python代码都会被评估。假如标签中的脚本写到stdout (如print) 语句中,你能够通过供给一个output 属性来指示在页面的什么地方显示输出。

在这个示例中,脚本的stdout 被引导到ID为"out" 的div 。

假如你把它保存到一个文件中,并在网络浏览器中打开它,你会首先看到一个 “加载 “指示器和一个暂停,由于浏览器获得了PyScript的运转时刻并将其设置好。该运转时在未来的加载中应坚持缓存,但仍需要一些时刻来激活。之后,Hello world 应该出现在页面上。

2、规范库导入

Python 的规范库在 PyScript 中可用,就像你在常规 Python 中运用它一样:只需import 导入就可以正常调用。

下面是一个调用datetime库显示时间的示例:

import datetime
print ("Current date and time:",    datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S"))

3、调用来自PyPI的库

除了标准库,python还有大量的第三方库,假如咱们想从PyPI中安装一个包并运用它呢?

PyScript 有另一个标签,py-env ,它指定了需要安装的第三方软件包。

下面的示例是调用一个第三方库humanize库,用这个库来替换原始脚本中的py-script 块:

<py-env>
- humanize
</py-env>
<py-script output="out">
from datetime import datetime
import humanize
now_int = int(datetime.timestamp(datetime.now()))
now_fmt = humanize.intcomma(now_int)
print("It has been", now_fmt, "seconds since the epoch.")
</py-script>

py-env 块中列出要增加的软件包,就像在 Python 项目的requirements.txt 文件中列出它们一样。然后咱们能够像对待其他 Python 软件包一样导入和运用它们。

留意,并不是一切来自PyPI的包都能顺利安装和运行。例如,requests 需要拜访尚不支撑的网络组件。(这个问题的一个可能的解决方法是运用pyodide.http.pyfetch ,它被原生支撑)。可是纯 Python 包,如humanize ,应该运转正常。Anaconda 供给的比方中运用的包,如numpy,pandas,bokeh, 或matplotlib ,也能够正常运行。

4、本地导入

对于另一种常见的情况,假定你想从与你的网页在同一目录树下的其它 Python 脚本中导入。运用导入能够更容易地将更多的 Python 逻辑从网页自身移出,在那里它和你的模板文件混在一起,可能会变得难以处理。

一般来说,Python 。PyScript 不能以这种方法作业,所以你需要指定哪些文件能够作为可导入模块。

比方说,你有一个名为index.html 的网页,在你的 web 服务器的某个目录下,你想在它旁边放置一个名为main.py 的 Python 文件。这样,你的页内脚本就能够import main ,而你能够把大部分的 Python 逻辑限制在实践的.py 文件中。

在你的py-env 块中指定你想导入的 Python 文件。

- paths:`` - ./main.py

这将允许main.py ,在与网页自身相同的 web 服务器目录下,能够与import main 一同导入。

要记住一件重要的事情。你不能对你在浏览器中本地启动的网页进行这样的导入。这是由于WebAssembly运转时和浏览器自身对文件体系拜访的限制造成的。相反,你需要在网络服务器上托管这些网页,以供给网页和.py 文件。

5、REPL 标签

Python用户应该了解Jupyter Notebook,它是Python的浏览器内实时编码环境,一般用于数学和统计学。PyScript为这样的环境供给了一个原始的构建模块,即py-repl 标签。

py-repl 在网页上生成一个输入字段,其功用就像一个十分基本的Jupyter笔记本环境。

下面的示例相当于一个自己手搓的jupyter:

<!DOCTYPE html>
<html lang="en">
  <head>
    <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
    <script defer src="https://pyscript.net/alpha/pyscript.js"></script>
  </head>
  <body>
    <h1><b>pyscript REPL</b></h1>
    Tip: 按下 Shift-ENTER 运行一个单元
    <br>
    <div>
      <py-repl id="my-repl" auto-generate="true"> </py-repl>
    </div>
  </body>
</html>

效果如下:
PyScript的相似Jupyter的REPL组件能够让你在页面中交互式地运转Python,尽管它还不是很灵活或可装备。

6、与 JavaScript 事件监听器互动

由于 PyScript 是根据pyodide 的,所以它运用pyodide 的机制来与 DOM 交互。例如,假如咱们想获得一个网页上的输入框的值并在咱们的Python代码中运用它,咱们会这样做。

<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
        <script defer src="https://pyscript.net/unstable/pyscript.js"></script>

    </head>
    <body>

<input id="txt">
<py-script>
from js import document, console
from pyodide import create_proxy
def _eventlog(e):
    console.log(f"Input value: {e.target.value}")
eventlog = create_proxy(_eventlog)
document.getElementById("txt").addEventListener("input", eventlog)
</py-script>

    </body>
</html>


js 库为许多常见的 JavaScript 实体供给了一个 Python 接口,比方document 和console 目标。它们在PyScript中的行为与在JavaScript中的行为简直完全相同。pyodide 中的create_proxy 函数能够让咱们取一个 Python 函数目标并为它生成一个 JavaScript 接口,因而它能够被用作input 框的事情监听器。input 框中的任何按键都会被记录到控制台,但它们也能够在Python端被处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1699691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot项目,@Test写法 @Before @After

某文件示例 package cn.xxx.crm.boss;import cn.xxxx.crm.manager.mq.rabbit.AliyunCredentialsProvider; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; im…

大模型提示词Prompt学习

引言 关于chatGPT的Prompt Engineer&#xff0c;大家肯定耳朵都听起茧了。但是它的来由&#xff1f;&#xff0c;怎么能用好&#xff1f;很多人可能并不觉得并不是一个问题&#xff0c;或者说认定是一个很快会过时的概念。但其实也不能说得非常清楚&#xff08;因为觉得没必要深…

x264 码率控制中实现 VBV 算法源码分析

关于 VBV 的解释与原理可以参考x264 码率控制 VBV 原理。 x264中 VBV 算法执行的流程 vbv 参数配置相关函数 x264_param_default函数 功能:编码参数默认设置,关于 vbv的参数的默认设置;函数内vbv相关代码:/* ... */ //代码有删减 param->rc.i_vbv_max_bitrate = 0; par…

《软件方法(下)》8.3.4.3 关于“整体-部分”结构

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 8.3 建模步骤C-2 识别类的关系 8.3.4 识别关联关系 8.3.4.2 关联的进一步细分 是否进一步细分各种关联&#xff0c;各种面向对象方法学观点不同。有的认为关联就是关联&#xff0c;…

mvc的常见注解

问文心一言的&#xff0c;记录一下。 PathVariable 路径变量注解 PathVariable 是 Spring MVC 提供的一个注解&#xff0c;它用于从 URI 模板变量中绑定值到控制器方法的参数上。当你在 RequestMapping、GetMapping、PostMapping、PutMapping、DeleteMapping 等注解的 URL 路…

maven默认src下的xml,properties文件不打包到classes文件夹下

一、第一种是建立src/main/resources文件夹&#xff0c;将xml&#xff0c;properties等资源文件放置到这个目录中。maven工具默认在编译的时候&#xff0c;会将resources文件夹中的资源文件一块打包进classes目录中。 这时候注意把resources设置成resource目录&#xff0c;已经…

操作系统 c语言模仿 动态分区存储管理方式的主存分配回收

1&#xff0e;实验目的 深入了解动态分区存储管理方式的主存分配回收的实现。 2&#xff0e;实验预备知识 存储管理中动态分区的管理方式。 3&#xff0e;实验内容 编写程序完成动态分区存储管理方式的主存分配回收的实现。实验具体包括&#xff1a;首先确定主存空间分配表&…

Android 布局中@NULL的使用和代码实现方式详解

文章目录 1、使用场景2、示例代码实现2.1、移除背景2.2 、移除文本2.3、移除布局宽度或高度2.4、移除提示文本2.5、移除图像资源 3、综合示例3.1、布局文件 activity_main.xml3.2、主活动文件 MainActivity.java3.4、资源文件3.5、运行结果 4、优点5、缺点6、综合分析6.1、适用…

地下城游戏(leetcode)

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 地下城游戏https://leetcode.cn/problems/dungeon-game/description/ 图解分析&#xff1a; 代码 class Solution { public:int calculateMinimumHP(vector<vector<int>>& vv) {int row vv.size(), col …

【云原生】Kubernetes基础命令合集

目录 引言 一、命令概述 &#xff08;一&#xff09;命令分类 &#xff08;二&#xff09;基本语法 二、查看基本信息 &#xff08;一&#xff09;环境指令 1.查看版本信息 2.查看资源对象简写 3.添加补全信息 4.查看日志 5.查看集群信息 &#xff08;二&#xff0…

5月26号总结

目录 刷题记录(Codeforces Round 947 &#xff08;Div. 1 Div. 2&#xff09;前三题) 1.A. Bazoka and Mochas Array 2.B. 378QAQ and Mochas Array 3.C. Chamo and Mochas Array 刷题记录(Codeforces Round 947 &#xff08;Div. 1 Div. 2&#xff09;前三题) 1.A. Bazok…

力扣 滑动窗口题目总结

Leetcode3.无重复字符的最长子串 思路&#xff1a; 这道题主要用到思路是&#xff1a;滑动窗口 什么是滑动窗口&#xff1f; 其实就是一个队列,比如例题中的 abcabcbb&#xff0c;进入这个队列&#xff08;窗口&#xff09;为 abc 满足题目要求&#xff0c;当再进入 a&#x…

使用 LangFuse 意外被挂马!我是怎么恢复系统稳定的?

在使用 LangFuse 过程中,被意外挂马!通过一番折腾服务恢复正常~ 本文将详细介绍应对恶意脚本和进程的完整方案,包括识别、清理、恢复和预防步骤。 阿里云扫到的信息 被执行的 Base64 SUlaQnRTCmV4ZWMgJj4vZGV2L251bGwKSUhDa0hQbmQ9Li8uJChkYXRlfG1kNXN1bXxoZWFkIC1jMjApCl…

(2024,attention,可并行计算的 RNN,并行前缀扫描)将注意力当作 RNN

Attention as an RNN 公众号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 3. 方法 3.1 注意力作为一种&#xff08;多对一的&#xff09;RNN 3.2 注意力作为&#xff08;多对多&…

9.4 Go语言入门(运算符)

Go语言入门&#xff08;运算符&#xff09; 目录三、运算符1. 算术运算符2. 关系运算符3. 逻辑运算符4. 位运算符5. 赋值运算符6. 其他运算符7. 运算符优先级 目录 Go 语言&#xff08;Golang&#xff09;是一种静态类型、编译型语言&#xff0c;由 Google 开发&#xff0c;专注…

异步那些事01

首先我们肯定先说创建线程 1.继承Thread类 o定义一个类MyThread继承Thread类 o在MyThread类中重写run()方法 o创建MyThread类的对象 o启动线程 package Java.thread;public class first extends Thread{public void run(){for(int i0;i<50;i){System.out.println("我…

go ast语义分析实现指标计算器

什么是AST 首先我们要知道AST是什么&#xff08;Abstract Syntax Tree&#xff0c;AST&#xff09;&#xff0c;简称为语法树&#xff0c;是go语言源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构&#xff0c;树上的每个节点都表示源代码中的一种结构。 …

英语四级翻译练习笔记①——大学英语四级考试2023年12月真题(第一套)——用ChatGPT修改训练四级翻译

目录 引言&#xff08;必看&#xff09; 翻译原文 我的翻译 得分&#xff08;1-3分&#xff09; 原文&#xff1a; 你的翻译&#xff1a; 修改后的翻译&#xff1a; 详细错误讲解&#xff1a; 引言&#xff08;必看&#xff09; 这是一篇英语四级翻译的练习的专栏&…

Java刷题总结(面试)

1、String类 String不可变 java 中String是 immutable的&#xff0c;也就是不可变&#xff0c;一旦初始化&#xff0c;其引用指向的内容是不可变的。 也就是说&#xff0c;String str “aa”&#xff1b;str“bb”&#xff1b;第二句不是改变“aa”所存储地址的内容&#xf…

计算机毕业设计 | SSM汽车租赁系统(附源码)

1&#xff0c; 概述 1.1 课题背景 随着社会的快速发展&#xff0c;计算机的影响是全面且深入的。用户生活水平的不断提高&#xff0c;日常生活中用户对汽车租赁系统方面的要求也在不断提高&#xff0c;需要汽车租赁系统查询的人数更是不断增加&#xff0c;使得汽车租赁系统的…