写点什么

PyScript:让 Python 脚本在 Web 中跑起来

  • 2022-05-20
  • 本文字数:2422 字

    阅读完需:约 8 分钟

这是下一个大事件吗?如果继续发展下去,有可能。

 

在 2022 年 PyCon 美国大会期间,作为主题演讲嘉宾之一的 Peter Wang 公布了 PyScript,一种在 HTML 中直接编写 Python 脚本的方法。或许你不知道 Peter,但你可能听说过 Anaconda,这是一种流行的开源的 Python 和 R 语言的发行版本,特别关注数据科学。Peter 正是 Anaconda 的 CEO 和联合创始人。

 

换言之,PyScript 是由一家著名的科技公司开发的,这可能会保证它在不久的将来成为可行的方案。它在 Python 和 Web 开发者中受到了极大的关注,GitHub 上已有超过 10k 颗 Stars。然而,它是否能成为一个成功的、有竞争力的产品,取决于长期的时间和开发投入。目前,它还有一些已知的缺陷(将在最后讨论)。

 

闲话少说,让我们快速了解一下这个令人振奋的产品吧!

py-script 标签

我们知道,HTML 文件是大多数网站最常见的元素。在创建网站时,我们的工作就是直接或间接地通过一些框架来编制 HTML 文件。在典型的 HTML 文件中,你会看到各种类型的标签。例如,定义了 HTML 页面的元数据和关键信息,</code><span style="color: #494949">是整个文档的标题,而</span><code data-type="codeinline"><h1></code><span style="color: #494949">、</span><code data-type="codeinline"><h2></code><span style="color: #494949">等定义了不同级别的内容标题。</span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">如前所述,PyScript 允许你在 HTML 中编写 Python 脚本,它使用一个特殊的标签</span><code data-type="codeinline">py-script</code><span style="color: #494949">。在这个标签中,你可以嵌入 Python 脚本。要了解它是如何工作的,可以创建一个 HTML 文件,其中包含以下代码,并使用 Chrome 浏览器打开该文件。在 Chrome 浏览器中,你应该能够看到类似下面这样的内容:</span></p><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/b7/b7cf3649eb920dfd76b246074c54a8f0.png" alt data-type="image"/><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/d1/d1c8a6e49c89d1695ab45b26f726d77e.png" alt data-type="image"/><p data-type="paragraph" data-align-center ><span style="font-size: 9px">作者截图</span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">在上面的代码片段中,你可能已经注意到以下三个关键点:</span></p><ul data-type="bulletedlist"><li data-type="listitem"><p data-type="paragraph"><code data-type="codeinline">link</code>标签定义了一个外部样式表。在这个例子中,我们使用了 PyScript 提供的<code data-type="codeinline">css</code>文件。</p></li><li data-type="listitem"><p data-type="paragraph"><span style="color: #494949">我们使用</span><code data-type="codeinline">script</code>标签来嵌入一个由<code data-type="codeinline">src</code>定义、由 PyScript 托管的外部脚本。我们使用了<code data-type="codeinline">defer</code>,这样脚本会在下载和页面解析完成后执行——本质上是一种延迟执行,而不是实时执行。</p></li><li data-type="listitem"><p data-type="paragraph"><span style="color: #494949">最有趣的部分是</span><code data-type="codeinline">py-script</code>标签。如你所见,<code data-type="codeinline">print("Hello, World!")</code>是 Python 代码。当执行 HTML 文件时,就可以看到代码求值结果。</p></li></ul><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">这很酷,不是吗?如果你不熟悉 Web 开发,但了解 Python,就可以使用 PyScript 嵌入任何有效的 Python 代码。让我们再看一个例子。</span></p><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/80/80c04d7afe33fd0f4d34f391847a8e75.png" alt data-type="image"/><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/ff/ff83f9e4bfead1f156366ce957063170.png" alt data-type="image"/><p data-type="paragraph" data-align-center ><span style="color: #494949"><span style="font-size: 9px">另一个 PyScript 示例(图片由作者提供)</span></span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">在这里,我们写了一些需要计算的代码,可以看到,脚本得到了正确的执行。</span></p><h1 data-type="heading" data-id="heading1"><span style="color: #494949">py-env 标签</span></h1><p data-type="paragraph"><span style="color: #494949">在编写更复杂的代码时,就需要使用第三方库。在这种情况下,我们可以利用</span><code data-type="codeinline">py-env</code><span style="color: #494949">标签。你可能已经猜到的,env 是 environment 的缩写。</span><code data-type="codeinline">py-env</code><span style="color: #494949">标签中列出了运行代码所需的 Python 包。</span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">你可能知道,许多数据科学家都使用 pandas 进行数据处理工作。让我们看看下面的例子。</span></p><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/81/81a2e07ff71a317924c7664120862b6e.png" alt data-type="image"/><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/df/df79380011e061d1030cfe721b89989b.png" alt data-type="image"/><p data-type="paragraph" data-align-center ><span style="color: #494949"><span style="font-size: 9px">使用包的 PyScript(图片由作者提供)</span></span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">如你所见,我们在</span><code data-type="codeinline">py-env</code><span style="color: #494949">标签中指定了依赖项(即 Pandas),该标签包含在</span><code data-type="codeinline">head</code><span style="color: #494949">标签中。如果页面需要多个依赖项,可以在这里把它们全部列出:</span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><div data-type="codeblock"><div data-codeblock-wrap><div data-codeblock-codes><pre lang="text" data-origin="pm_code_preview"><code data-type=codeline><span class="hljs-tag"><<span class="hljs-name">py-env</span>></span></code><code data-type=codeline> - pandas</code><code data-type=codeline> - matplotlib</code><code data-type=codeline> - numpy</code><code data-type=codeline><span class="hljs-tag"></<span class="hljs-name">py-env</span>></span></code></pre></div><div data-codeblock-copy>复制代码</div><div data-codeblock-index><div data-codeblock-number="1"></div><div data-codeblock-number="2"></div><div data-codeblock-number="3"></div><div data-codeblock-number="4"></div><div data-codeblock-number="5"></div></div></div></div><p data-type="paragraph"><span style="color: #494949">如你所见,在</span><code data-type="codeinline">py-script</code><span style="color: #494949">标签中,我们确实可以使用 Pandas 库来创建一个</span><code data-type="codeinline">DataFrame</code><span style="color: #494949">对象。然而,当我们把打印出来时就会发现,它是一个单行,而不是一个结构化的数据表。没有一个适当的结构,我们就无法理解这些数据。幸运的是,我们可以使用</span><code data-type="codeinline">write</code><span style="color: #494949">函数(下文会讨论)。</span></p><h1 data-type="heading" data-id="heading2"><span style="color: #494949">将内容写入指定标签</span></h1><p data-type="paragraph"><span style="color: #494949">除了 Python 中的标准打印函数</span><code data-type="codeinline">print</code><span style="color: #494949">,作为脚本的一部分,PyScript 有自己的</span><code data-type="codeinline">write</code><span style="color: #494949">函数,可以将数据发送到页面上指定的 Web 元素中。请看下面的例子:</span></p><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/54/548175e28244c2b86e5b35db19bdf9ff.png" alt data-type="image"/><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/f6/f612d73015a7a21224b20561347bf3b2.png" alt data-type="image"/><p data-type="paragraph" data-align-center ><span style="color: #494949"><span style="font-size: 9px">PyScript 写函数 write(图片由作者提供)</span></span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">与之前的例子相比,上述代码片段有两个重大变化:</span></p><ul data-type="bulletedlist"><li data-type="listitem"><p data-type="paragraph"><span style="color: #494949">我们现在定义了一个 id 为</span><code data-type="codeinline">"DataFrame"</code>的<code data-type="codeinline">div</code>,这样稍后就可以引用。</p></li><li data-type="listitem"><p data-type="paragraph"><span style="color: #494949">在</span><code data-type="codeinline">py-script</code>标签中,我们创建一个与之前相同的<code data-type="codeinline">DataFrame</code>对象。但现在,我们不是调用<code data-type="codeinline">print</code>,而是调用<code data-type="codeinline">pyscript.write</code>函数,请求 PyScript 处理并在<code data-type="codeinline">"DataFrame"</code>中显示<code data-type="codeinline">DataFrame</code>对象。从输出可以看到,我们现在有一个结构化的表格了。</p></li></ul><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><code data-type="codeinline">write</code><span style="color: #494949">函数不仅能够打印表格,还能够打印数字。下面的例子向你展示了我们如何使用</span><code data-type="codeinline">matplotlib</code><span style="color: #494949">(一个流行的 Python 包,用于数据可视化)来显示由 Python 创建的图。</span></p><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/67/67aa8e871dffbace046e760e4249ec4d.png" alt data-type="image"/><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/9c/9c5c42ab5a569023ab63df58dfbedcab.png" alt data-type="image"/><p data-type="paragraph" data-align-center ><span style="color: #494949"><span style="font-size: 9px">PyScript 打印图(图片由作者提供)</span></span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">如你所见,</span><code data-type="codeinline">write</code><span style="color: #494949"> 函数以期望的方式显示了图。</span></p><h1 data-type="heading" data-id="heading3"><span style="color: #494949">py-repl 标签</span></h1><p data-type="paragraph"></p><p data-type="paragraph"><span style="color: #494949">Python 学习的最好方法之一是使用 REPL:读取(Read)、求值(Evaluate)、打印(Print)和循环(Loop)。也就是说,使用一个交互式的 Python 控制台,输入一些代码,Python 对其进行求值并打印适当的输出,然后重复这个过程。Web 页面也可以提供这样的 REPL 环境,比如 Jupyter Notebook。</span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">PyScript 可以使用</span><code data-type="codeinline">py-repl</code><span style="color: #494949">标签提供与此类似的东西。在这个元素中,你可以让用户自己编写代码,也可以以编程方式输入代码。请看下面的例子:</span></p><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/b6/b66645cc4bc41c399659afaff9f3d7ee.png" alt data-type="image"/><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/a7/a716f3728f2d077ead11eab508d64477.png" alt data-type="image"/><p data-type="paragraph" data-align-center ><span style="color: #494949"><span style="font-size: 9px">PyScript REPL(图片由作者提供)</span></span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">如你所见,上图中有一个单元格,其中包括在</span><code data-type="codeinline">py-repl</code><span style="color: #494949">标签中指定的代码。值得注意的是,单元格中的代码可以引用我们之前在</span><code data-type="codeinline">py-script</code><span style="color: #494949">标签中定义的变量。一切看起来都很协调。</span></p><h1 data-type="heading" data-id="heading4"><span style="color: #494949">感想</span></h1><p data-type="paragraph"></p><p data-type="paragraph"><span style="color: #494949">本文介绍的内容是现阶段 PyScript 所能提供的主要亮点。它似乎是一个很有前途的产品,因为它提供了一个灵活的框架,让 Python 程序员可以在没有太多 Web 开发知识的情况下创建 Web 应用。然而,也有其他类似的成功的产品,因此,竞争会很激烈。</span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">例如,如果我需要为自己的数据科学项目创建一个 Web 应用,我就会直接使用 Streamlit。它的功能已经相对成熟。请注意,虽然都与 Web 开发有关,但 PyScript 和 Streamlit 属于不同的产品系。PyScript 应该更通用,因为它的目标是让你可以在任何网页上嵌入任何 Python 代码,Streamlit 做不到这一点。</span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">在 PyScript 为更多的人所接受之前,它有几个问题必须解决。例如,Web 页面的加载速度非常慢。如果你尝试跟随本教程运行代码,可能就会注意到,在 Web 页面的显示会有一个明显的滞后。</span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">尽管如此,我还是觉得这个产品会继续发展,我的信心主要来自于它的开发者——给我们带来极好的 Anaconda 工具的 Anaconda 团队。</span></p><p data-type="paragraph"></p><p data-type="paragraph"><span style="color: #333333"><i>本文最初发布于 Better Programming。</i></span></p><p data-type="paragraph"></p><p data-type="paragraph"><span style="color: #494949">查看英文原文:</span><a href="https://betterprogramming.pub/running-python-script-on-the-web-using-pyscript-the-next-big-thing-8ace9543d75" title="xxx" data-type="link">Running Python Scripts on the Web Using PyScript</a></p></div></div><!----><!--]--><span></span></div><!----></article><span></span><!--]--><div class=""><!--[--><div class="comment-skeleton" data-v-66ad80be><div class="skeleton-header" data-v-66ad80be><div class="skeleton-title-bar" data-v-66ad80be></div><div class="skeleton-title-text" data-v-66ad80be></div><div class="skeleton-title-number" data-v-66ad80be></div></div><div class="skeleton-form" data-v-66ad80be><div class="skeleton-input" data-v-66ad80be></div><div class="skeleton-button" data-v-66ad80be></div></div><div class="skeleton-list" data-v-66ad80be><!--[--><div class="skeleton-item" data-v-66ad80be><div class="skeleton-avatar" data-v-66ad80be></div><div class="skeleton-content" data-v-66ad80be><div class="skeleton-username" data-v-66ad80be></div><div class="skeleton-text" data-v-66ad80be><!--[--><div class="skeleton-line" data-v-66ad80be></div><div class="skeleton-line" data-v-66ad80be></div><div class="skeleton-line" data-v-66ad80be></div><!--]--></div><div class="skeleton-actions" data-v-66ad80be><div class="skeleton-action-item" data-v-66ad80be></div><div class="skeleton-action-item" data-v-66ad80be></div><div class="skeleton-action-item" data-v-66ad80be></div></div></div></div><!--]--></div></div><!--]--><span></span><!--[--><!--]--></div></div><div class="_content-side_13g2e_76" is-immersed="false"><!--[--><!--[--><!--]--><!--]--></div></div><span></span></div><!--]--><span></span><div id="check-bottom-bar"></div><div class="_layout-footer_4ccit_401"><div class="footer" data-v-73b2c941><!--[--><ul class="layout-content" data-v-73b2c941><li class="theme" data-v-73b2c941><div class="logo" data-v-73b2c941><img src="https://static001.geekbang.org/static/web/nuxt/www.infoq.cn/logo.BJF4WFeC.png" alt="logo" data-v-73b2c941><p data-v-73b2c941>促进软件开发及相关领域知识与创新的传播</p></div></li><!--[--><li data-v-73b2c941><dl class="footer-nav" data-v-73b2c941><dt data-v-73b2c941></dt><!--[--><dd data-v-73b2c941><!----><a href="https://www.infoq.cn/about" target="_blank" rel="noopener nofollow" data-v-73b2c941>关于我们</a></dd><dd data-v-73b2c941><!----><a href="https://www.infoq.cn/contribute" target="_blank" rel="noopener nofollow" data-v-73b2c941>我要投稿</a></dd><dd data-v-73b2c941><!----><a href="https://www.geekbang.org/partner" target="_blank" rel="noopener nofollow" data-v-73b2c941>合作伙伴</a></dd><dd data-v-73b2c941><!----><a href="https://www.lagou.com/gongsi/j43775.html" target="_blank" rel="noopener nofollow" data-v-73b2c941>加入我们</a></dd><dd data-v-73b2c941><!----><a href="https://infoq.cn/official/account" target="_blank" rel="noopener nofollow" data-v-73b2c941>关注我们</a></dd><!--]--></dl></li><li data-v-73b2c941><dl class="footer-nav" data-v-73b2c941><dt data-v-73b2c941>联系我们</dt><!--[--><dd data-v-73b2c941><!----><a href="mailto:editors@geekbang.com" target="_blank" rel="noopener nofollow" data-v-73b2c941>内容投稿:editors@geekbang.com</a></dd><dd data-v-73b2c941><!----><a href="mailto:hezuo@geekbang.com" target="_blank" rel="noopener nofollow" data-v-73b2c941>业务合作:hezuo@geekbang.com</a></dd><dd data-v-73b2c941><!----><a href="mailto:feedback@geekbang.com" target="_blank" rel="noopener nofollow" data-v-73b2c941>反馈投诉:feedback@geekbang.com</a></dd><dd data-v-73b2c941><!----><a href="mailto:zhaopin@geekbang.com" target="_blank" rel="noopener nofollow" data-v-73b2c941>加入我们:zhaopin@geekbang.com</a></dd><dd data-v-73b2c941><!----><span data-v-73b2c941>联系电话:010-64738142</span></dd><dd data-v-73b2c941><!----><span data-v-73b2c941>地址:北京市朝阳区望京北路9号2幢7层A701</span></dd><!--]--></dl></li><li data-v-73b2c941><dl class="footer-nav" data-v-73b2c941><dt data-v-73b2c941>InfoQ 近期会议</dt><!--[--><dd data-v-73b2c941><!----><a href="https://qcon.infoq.cn/2026/beijing?utm_source=infoq&utm_medium=footer" target="_blank" rel="noopener nofollow" data-v-73b2c941>北京 · QCon 全球软件开发大会 2026.4.16-18</a></dd><dd data-v-73b2c941><!----><a href="https://aicon.infoq.cn/2026/shanghai?utm_source=infoq&utm_medium=footer" target="_blank" rel="noopener nofollow" data-v-73b2c941>上海 · AICon 全球人工智能开发与应用大会 2026.6.26-27</a></dd><!--]--></dl></li><li data-v-73b2c941><dl class="footer-nav" data-v-73b2c941><dt data-v-73b2c941>全球 InfoQ</dt><!--[--><dd data-v-73b2c941><img src="https://static001.infoq.cn/resource/image/55/38/55cd81623e36f5ab7a7db74d60b74838.png" alt="会议图片" data-v-73b2c941><a href="https://www.infoq.com/" target="_blank" rel="noopener nofollow" data-v-73b2c941>InfoQ En</a></dd><dd data-v-73b2c941><img src="https://static001.infoq.cn/resource/image/95/13/95fe851c02c86120e9037eada6a36d13.png" alt="会议图片" data-v-73b2c941><a href="https://www.infoq.com/jp/" target="_blank" rel="noopener nofollow" data-v-73b2c941>InfoQ Jp</a></dd><dd data-v-73b2c941><img src="https://static001.infoq.cn/resource/image/2a/3e/2aa440b6d94e94f64c508f16da38933e.png" alt="会议图片" data-v-73b2c941><a href="http://www.infoq.com/fr/" target="_blank" rel="noopener nofollow" data-v-73b2c941>InfoQ Fr</a></dd><dd data-v-73b2c941><img src="https://static001.infoq.cn/resource/image/4e/1e/4e737ce82bc7c8a1c2f2307bcea9a11e.png" alt="会议图片" data-v-73b2c941><a href="http://www.infoq.com/br/" target="_blank" rel="noopener nofollow" data-v-73b2c941>InfoQ Br</a></dd><!--]--></dl></li><!--]--></ul><!--]--><div class="copyright" data-v-73b2c941> Copyright © 2026, Geekbang Technology Ltd. All rights reserved. 极客邦控股(北京)有限公司 | <a target="_blank" class="icp" href="https://beian.miit.gov.cn/" data-v-73b2c941>京 ICP 备 16027448 号 - 5</a><a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010502039052" data-v-73b2c941><img src="data:image/png;base64,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" alt="京公网安备" data-v-73b2c941><span data-v-73b2c941>京公网安备 11010502039052号</span></a><a target="_blank" class="icp" href="https://time.geekbang.org/hybrid/certificates" data-v-73b2c941> | 产品资质</a></div></div></div></div><span></span></div></div></div><div id="teleports"></div><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="true" id="__NUXT_DATA__">[["ShallowReactive",1],{"data":2,"state":1702,"once":1704,"_errors":1705,"serverRendered":488,"path":1707,"pinia":1708},["ShallowReactive",3],{"navConfig":4,"articleDetail":481,"headerMenuList":1550},{"notice":5,"header":8,"footer":79,"bus":145,"web":448},{"content":6,"end_time":7,"link":6,"start_time":7,"time_now":7},"",0,[9,15,18,22,25,28,32,36,40,43,47,50,53,58,62,66,70,74],{"alias":10,"child_list":11,"icon":6,"id":12,"link":6,"name":13,"type":14}," industrynews",null,147,"企业动态",1,{"alias":6,"child_list":11,"icon":6,"id":16,"link":6,"name":17,"type":14},1168,"行业深度",{"alias":19,"child_list":11,"icon":6,"id":20,"link":6,"name":21,"type":14},"AI&LLM",31,"AI&大模型",{"alias":6,"child_list":11,"icon":6,"id":23,"link":6,"name":24,"type":14},1207,"出海",{"alias":6,"child_list":11,"icon":6,"id":26,"link":6,"name":27,"type":14},1174,"后端",{"alias":6,"child_list":29,"icon":6,"id":30,"link":6,"name":31,"type":14},[],1187,"芯片&算力",{"alias":33,"child_list":11,"icon":6,"id":34,"link":6,"name":35,"type":14},"architecture",8,"架构",{"alias":37,"child_list":11,"icon":6,"id":38,"link":6,"name":39,"type":14},"bigdata",15,"大数据",{"alias":6,"child_list":11,"icon":6,"id":41,"link":6,"name":42,"type":14},1195,"软件工程",{"alias":44,"child_list":11,"icon":6,"id":45,"link":6,"name":46,"type":14},"cloud-computing",11,"云计算",{"alias":6,"child_list":11,"icon":6,"id":48,"link":6,"name":49,"type":14},1208,"大前端",{"alias":6,"child_list":11,"icon":6,"id":51,"link":6,"name":52,"type":14},1204,"管理/文化",{"child_list":54,"icon":6,"id":7,"link":55,"name":56,"type":57},[],"https://www.infoq.cn/content-center","企业服务案例",3,{"child_list":59,"icon":6,"id":7,"link":60,"name":61,"type":57},[],"https://time.geekbang.org","极客时间",{"child_list":63,"icon":6,"id":7,"link":64,"name":65,"type":57},[],"https://u.geekbang.org/?utm_source=infoq_web&utm_medium=menu&utm_term=infoqwebmenu","极客时间训练营",{"child_list":67,"icon":6,"id":7,"link":68,"name":69,"type":57},[],"https://b.geekbang.org/?utm_source=infoqweb&utm_medium=menu&gk_source=infoqwebmenu_2024092401","企业培训",{"child_list":71,"icon":6,"id":7,"link":72,"name":73,"type":57},[],"https://tgo.infoq.cn/","高端学员",{"child_list":75,"icon":76,"id":7,"link":77,"name":78,"type":57},[],"https://static001.infoq.cn/resource/image/52/fa/5248de588832bcf63b5a9570caa2b0fa.png","https://www.infoq.cn/app/download?utm_source=infoq_nav_web&utm_medium=infoq_nav_web&utm_term=infoq_nav_web","App下载",[80,98,117,126],{"list":81,"name":97},[82,85,88,91,94],{"name":83,"link":84,"image":6},"关于我们","https://www.infoq.cn/about",{"name":86,"link":87,"image":6},"我要投稿","https://www.infoq.cn/contribute",{"name":89,"link":90,"image":6},"合作伙伴","https://www.geekbang.org/partner",{"name":92,"link":93,"image":6},"加入我们","https://www.lagou.com/gongsi/j43775.html",{"name":95,"link":96,"image":6},"关注我们","https://infoq.cn/official/account","InfoQ",{"list":99,"name":116},[100,103,106,109,112,114],{"name":101,"link":102,"image":6},"内容投稿:editors@geekbang.com","mailto:editors@geekbang.com",{"name":104,"link":105,"image":6},"业务合作:hezuo@geekbang.com","mailto:hezuo@geekbang.com",{"name":107,"link":108,"image":6},"反馈投诉:feedback@geekbang.com","mailto:feedback@geekbang.com",{"name":110,"link":111,"image":6},"加入我们:zhaopin@geekbang.com","mailto:zhaopin@geekbang.com",{"name":113,"link":6,"image":6},"联系电话:010-64738142",{"name":115,"link":6,"image":6},"地址:北京市朝阳区望京北路9号2幢7层A701","联系我们",{"list":118,"name":125},[119,122],{"name":120,"link":121,"image":6},"北京 · QCon 全球软件开发大会 2026.4.16-18","https://qcon.infoq.cn/2026/beijing?utm_source=infoq&utm_medium=footer",{"name":123,"link":124,"image":6},"上海 · AICon 全球人工智能开发与应用大会 2026.6.26-27","https://aicon.infoq.cn/2026/shanghai?utm_source=infoq&utm_medium=footer","InfoQ 近期会议",{"list":127,"name":144},[128,132,136,140],{"name":129,"link":130,"image":131},"InfoQ En","https://www.infoq.com/","https://static001.infoq.cn/resource/image/55/38/55cd81623e36f5ab7a7db74d60b74838.png",{"name":133,"link":134,"image":135},"InfoQ Jp","https://www.infoq.com/jp/","https://static001.infoq.cn/resource/image/95/13/95fe851c02c86120e9037eada6a36d13.png",{"name":137,"link":138,"image":139},"InfoQ Fr","http://www.infoq.com/fr/","https://static001.infoq.cn/resource/image/2a/3e/2aa440b6d94e94f64c508f16da38933e.png",{"name":141,"link":142,"image":143},"InfoQ Br","http://www.infoq.com/br/","https://static001.infoq.cn/resource/image/4e/1e/4e737ce82bc7c8a1c2f2307bcea9a11e.png","全球 InfoQ",[146,153,160,167,173,180,186,192,198,205,211,218,224,231,236,242,248,254,260,266,272,278,284,289,296,302,309,315,321,327,333,339,345,351,356,362,369,375,381,386,392,397,401,406,412,418,425,430,436,442],{"end_time":147,"img":148,"link":149,"location":150,"name":151,"start_time":152},1777478399,"https://static001.infoq.cn/resource/image/5b/71/5b923cb0f1d54c37e897b79a5f450371.png","https://www.infoq.cn/form/?id=3074&utm_source=web&sign=iq_69e5d83a017ed","线上直播","亚马逊云科技新品发布全球直播",1777392000,{"end_time":154,"img":155,"link":156,"location":157,"name":158,"start_time":159},1778688000,"https://static001.infoq.cn/resource/image/c2/0a/c266340326f2cfa8dbeb20001fb3d90a.jpg","https://create2026.events.net.cn/#/","北京国家会议中心二期","Create2026百度AI开发者大会",1778601600,{"end_time":161,"img":162,"link":163,"location":164,"name":165,"start_time":166},1778687999,"https://static001.infoq.cn/resource/image/77/1a/77ef30ee4075cdf1895953f49320641a.png","https://xie.infoq.cn/article/6dd68fc43dcf05b4634800743?utm_source=home_write_related&utm_medium=article","线上","2026写作社区第一期",1776009600,{"end_time":168,"img":169,"link":170,"location":164,"name":171,"start_time":172},1777564799,"https://static001.infoq.cn/resource/image/46/bd/46772038735yy4da5a4418f96b406cbd.jpg","https://maas.xfyun.cn/modelSquare?ch=maas-infoq-G9n8","讯飞星辰maas平台推广",1772985600,{"end_time":174,"img":175,"link":176,"location":177,"name":178,"start_time":179},1774627199,"https://static001.infoq.cn/resource/image/18/63/1898936d088123092b2ac0478bc72963.png","https://qdrl.qq.com/VDybhsBX","上海","2026腾讯云城市峰会•上海站",1774540800,{"end_time":181,"img":182,"link":183,"location":164,"name":184,"start_time":185},1769702399,"https://static001.infoq.cn/resource/image/d4/9c/d4e5067b12778600a0c7dab53868949c.png","https://www.infoq.cn/form/?id=2995&utm_source=infoq&sign=iq_6964b8f50a6d2","2025 re:Invent 精彩回顾及新品解读",1768320000,{"end_time":187,"img":188,"link":189,"location":164,"name":190,"start_time":191},1864569599,"https://static001.infoq.cn/resource/image/df/d7/df1a288f1e97e615ba35cae4a9127ed7.jpg","https://www.infoq.cn/space/snowflake","Snowflake 中文社区上线!",1766073600,{"end_time":193,"img":194,"link":195,"location":164,"name":196,"start_time":197},1766937599,"https://static001.infoq.cn/resource/image/6c/9a/6c9e1e98a21c06cfyy6a4236e8dc0e9a.png","https://developer.huawei.com/consumer/cn/?ha_source=InfoQ&ha_sourceId=70000011","鸿蒙开发者阵营 智能生态新图景!",1766332800,{"end_time":199,"img":200,"link":201,"location":202,"name":203,"start_time":204},1766246399,"https://static001.infoq.cn/resource/image/36/ec/36d8b16de68a2aa3c2a3ce732d318dec.png","https://www.infoq.cn/form/?id=2926&utm_source=gw&sign=iq_6938cf671ced6","北京","出海时代的基础设施构建与模型场景实践",1765296000,{"end_time":206,"img":207,"link":208,"location":164,"name":209,"start_time":210},1763481599,"https://static001.infoq.cn/resource/image/23/f9/23daea7659yye0e9e4bd55733a413bf9.png","https://www.infoq.cn/form/?id=2876&utm_source=infoq&sign=iq_690dc735a6bc5","你的 Agentic Al 队友已上线",1763049600,{"end_time":212,"img":213,"link":214,"location":215,"name":216,"start_time":217},1720799999,"https://static001.infoq.cn/resource/image/8d/77/8d3b0287db45117a2d1abbd8061fd177.jpg","https://www.infoq.cn/event/?id=286&utm_source=1&sign=iq_667d3d12723c8","深圳","火山引擎金融大模型城市环游·深圳站",1720713600,{"end_time":219,"img":220,"link":221,"location":177,"name":222,"start_time":223},1761321599,"https://static001.infoq.cn/resource/image/d5/3d/d538764e308a60384168b28e0f394f3d.png","https://www.infoq.cn/form/?id=2827&utm_source=huodongdabenying&sign=iq_68ef417882d95","【QCon专场】AI双引擎:业务增长与安全重构",1761235200,{"end_time":225,"img":226,"link":227,"location":228,"name":229,"start_time":230},1761235199,"https://static001.infoq.cn/resource/image/cb/f7/cbbyy3d4ea8d4b3fcaa37e7140e120f7.png","https://jinshuju.com/f/MkXdNt?x_field_1=Amazon1","线下丨上海","QCon 亚马逊云专场:AI IDE重构开发想象",1761148800,{"end_time":232,"img":233,"link":195,"location":164,"name":234,"start_time":235},1763654399,"https://static001.infoq.cn/resource/image/15/ca/15b2f71676f5f3928ff5daeb21333dca.png","加入鸿蒙开发者阵营 开拓智能生态新蓝海!",1759248000,{"end_time":237,"img":238,"link":239,"location":164,"name":240,"start_time":241},1761840000,"https://static001.infoq.cn/resource/image/4f/41/4f7808d67c8e31b93d6fc1223716d241.jpg","https://www.infoq.cn/article/Xc1pH6JxKvgK7zFI8wFy","Snowflake 免费培训!欢迎参与!",1758988800,{"end_time":243,"img":244,"link":245,"location":164,"name":246,"start_time":247},1760975999,"https://static001.infoq.cn/resource/image/4e/d2/4e80781158e74fba43ba56d1f1d3ffd2.jpg","https://competition.atomgit.com/competitionInfo?id=49f0205ecd5c81c96381829456fef6a5&utm_source=inf1#heading-0-0","vivo大会",1760889600,{"end_time":249,"img":250,"link":251,"location":164,"name":252,"start_time":253},1763308799,"https://static001.infoq.cn/resource/image/b8/38/b844639e4b68d24036a3f1d4ba277038.png","https://www.infoq.cn/zones/fintechathon/campus2025/?id=2789&utm_source=guanwang&sign=iq_68d3b023255cf","2025 深圳国际金融科技大赛",1758816000,{"end_time":255,"img":256,"link":257,"location":164,"name":258,"start_time":259},1758038400,"https://static001.infoq.cn/resource/image/ba/2a/ba3fe8d0e31bdccf7c76f44f3157b12a.jpg","https://qdrl.qq.com/2lbhIc4r","2025腾讯全球数字生态大会",1757952000,{"end_time":261,"img":262,"link":263,"location":177,"name":264,"start_time":265},1753891199,"https://static001.infoq.cn/resource/image/d4/67/d4824160c0c26a3b04edf9dc0f2faa67.jpg","https://online2025.worldaic.com.cn/","WAIC",1753459200,{"end_time":267,"img":268,"link":269,"location":202,"name":270,"start_time":271},1756483200,"https://static001.infoq.cn/resource/image/17/18/1732a4bcdbeda67f98f66a33yy246b18.jpg","https://digital.cloud.baidu.com/mF/ems/none/3crBbdbaUbAgQdv8tF9ktG/HWSe9KTq83gsvLvEmWUQQY1","2025百度云智大会",1756310400,{"end_time":273,"img":274,"link":275,"location":164,"name":276,"start_time":277},1754496000,"https://static001.infoq.cn/resource/image/03/cc/03bec4d2ba678277fcaaeecc405895cc.png","https://www.infoq.cn/form/?id=2757&utm_source=infoq&sign=iq_688352ece260f","2025亚马逊云科技峰会精华回顾",1753632000,{"end_time":279,"img":280,"link":281,"location":164,"name":282,"start_time":283},1753977599,"https://static001.infoq.cn/resource/image/a5/d3/a5518edc427e92079fcd7956daabbcd3.png","https://www.infoq.cn/zones/awscertification-june/","亚马逊培训认证6月",1748707200,{"end_time":279,"img":285,"link":286,"location":164,"name":287,"start_time":288},"https://static001.infoq.cn/resource/image/00/cb/0049b66c781ca3f5b8d5d4de60dde7cb.png","https://qr20.cn/EoJnXW","即刻成为鸿蒙应用开发者 携手共拓鸿蒙世界!",1749398400,{"end_time":290,"img":291,"link":292,"location":293,"name":294,"start_time":295},1749571199,"https://static001.infoq.cn/resource/image/4a/26/4aa6fc20bb1eyy67772eb4a09873e026.png","https://qdrl.qq.com/cljVFWT9","青岛","2025 腾讯云城市峰会",1749484800,{"end_time":297,"img":298,"link":299,"location":177,"name":300,"start_time":301},1750348800,"https://static001.infoq.cn/resource/image/cf/43/cfb7236133b4736ba0a11be8cfae3043.png","https://www.infoq.cn/event/?id=298","亚马逊云SUMMIT",1750262400,{"end_time":303,"img":304,"link":305,"location":306,"name":307,"start_time":308},1747411200,"https://static001.infoq.cn/resource/image/ef/8c/efe32080fc748d5a07e569f08725bf8c.png","https://www.infoq.cn/form/?id=2679&utm_source=huodongdabenying&sign=iq_682166ae7775c","广州德事商务中心","2025 iFLYTEK 开发者TALK广州站",1747065600,{"end_time":310,"img":311,"link":312,"location":164,"name":313,"start_time":314},1745596799,"https://static001.infoq.cn/resource/image/61/57/6192fd75e85bee189d6cb7a3c34e9957.png","https://cloud.baidu.com/product-s/qianfan_home?track=44ca1a7f797708dfe98a81110b458fe0edf9d479e262c870","百度智能云干帆应用开发平台",1745510400,{"end_time":316,"img":317,"link":318,"location":177,"name":319,"start_time":320},1725638399,"https://static001.infoq.cn/resource/image/f6/f8/f60e03ca867228dd431db0e9f30138f8.png","https://register.inclusionconf.com/invitelogin?inviteCode=FS_j3lZdwf1&channelType=major","跨越安卓和iOS:开启国产OS移动开发新时代",1725552000,{"end_time":322,"img":323,"link":324,"location":164,"name":325,"start_time":326},1744819199,"https://static001.infoq.cn/resource/image/b9/20/b9c4f00bf0f085ef864eb89dae26b820.png","https://static001.geekbang.org/resource/image/4c/f4/4c06d0d4205fb11551f60871f858a9f4.png","AIGC时代,研发人破局转型之道",1744732800,{"end_time":328,"img":329,"link":330,"location":202,"name":331,"start_time":332},1744300799,"https://static001.infoq.cn/resource/image/bf/8b/bf2be549b7ef31367ce882cef0c80f8b.png","https://www.infoq.cn/form/?id=2630&utm_source=huodongdabenying&sign=iq_67e4cdd0c38d0","HarmonyOS NEXT创新特性与行业实践",1744214400,{"end_time":334,"img":335,"link":336,"location":164,"name":337,"start_time":338},1749139199,"https://static001.infoq.cn/resource/image/8f/5a/8f42b5102d2a6bb01b1yy25de678c05a.jpg","https://www.infoq.cn/article/EiZAWhIT5U9YRPi893NR","开源合规精选培训课程",1745596800,{"end_time":340,"img":341,"link":342,"location":164,"name":343,"start_time":344},1747843199,"https://static001.infoq.cn/resource/image/f4/e7/f4ea438f30b686f709187b789e4a57e7.png","https://sourl.co/geWFmz","亚马逊AI认证4月",1742486400,{"end_time":346,"img":347,"link":348,"location":164,"name":349,"start_time":350},1741881600,"https://static001.infoq.cn/resource/image/b3/d6/b3a02c6ea0269f79af48167yy01eced6.png","https://www.infoq.cn/event/?id=294","为突破而构建数据燃动AI",1739980800,{"end_time":352,"img":353,"link":195,"location":164,"name":354,"start_time":355},1738252800,"https://static001.infoq.cn/resource/image/0b/5a/0b27a8d162d93b7c6ea3e08b60e9f65a.png","即刻加入,成为harmony OS应用开发者",1735056000,{"end_time":357,"img":358,"link":359,"location":202,"name":360,"start_time":361},1734105599,"https://static001.infoq.cn/resource/image/3a/24/3a84c8b7aa904bf46177ff84e8c6cb24.jpg","https://www.infoq.cn/event/?id=293","Al for Data 与大模型训练加速实践 专场",1734019200,{"end_time":363,"img":364,"link":365,"location":366,"name":367,"start_time":368},1734278399,"https://static001.infoq.cn/resource/image/76/0c/76f5522fb34a5b0f23092d90a043770c.png","https://www.infoq.cn/form/?id=2460&utm_source=hd&sign=iq_6746f157b717f","广州","探索数据生态协同创新 Meetup",1734192000,{"end_time":370,"img":371,"link":372,"location":164,"name":373,"start_time":374},1734710399,"https://static001.infoq.cn/resource/image/22/dc/2211300cc2d2acfda040922ef5a6a1dc.png","https://www.infoq.cn/article/otlWQdLRB7ci1K1TPdbZ","字节跳动开源云原生数据仓库ByConity众测",1732636800,{"end_time":376,"img":377,"link":378,"location":177,"name":379,"start_time":380},1733587199,"https://static001.infoq.cn/resource/image/3f/a9/3f7cd8a638c24412fe295d810ae218a9.jpeg","https://www.huodongxing.com/event/6783033754700?qd=OpenTiny","2024华为云开源开发者论坛",1733500800,{"end_time":376,"img":382,"link":383,"location":164,"name":384,"start_time":385},"https://static001.infoq.cn/resource/image/f9/74/f93dd0b1242137659f8e5dd00decdb74.png","https://dev.amazoncloud.cn/competition/detail/genaicompetition?visitfrom=InfoQ1","第三届中国生成式 AI 应用创新挑战赛推广",1732204800,{"end_time":387,"img":388,"link":389,"location":164,"name":390,"start_time":391},1732982399,"https://static001.infoq.cn/resource/image/7e/0d/7e1428b18yy9b081542b4ef08a00ce0d.png","https://jsj.top/f/xU2Gmv","Amazon Q Developer 体验调研",1731513600,{"end_time":393,"img":394,"link":395,"location":164,"name":396,"start_time":391},1734019199,"https://static001.infoq.cn/resource/image/ff/c3/ff1287bf2a34793531813bb811896ac3.png","https://dev.amazoncloud.cn/associate-retake?visitfrom=infoq1","亚马逊云科技助理级认证活动",{"end_time":387,"img":398,"link":399,"location":164,"name":400,"start_time":391},"https://static001.infoq.cn/resource/image/3f/94/3f72e2c02d4a203980f89f3f6e813694.png","https://dev.amazoncloud.cn/learn/aitalent/obtainCertificate?visitfrom=infoQ1","亚马逊云科技AI从业者认证",{"end_time":387,"img":402,"link":403,"location":164,"name":404,"start_time":405},"https://static001.infoq.cn/resource/image/38/9c/38f2a6d31f52ef17781678c0a82dde9c.png","https://cloud.baidu.com/campaign/qianfan/index.html?track=98df3bcb86b429860e9c9fdca4fd2edc50b7882e882c090f","千帆大模型平台特惠专场",1731427200,{"end_time":407,"img":408,"link":409,"location":177,"name":410,"start_time":411},1731427199,"https://static001.infoq.cn/resource/image/81/b4/81e10cbdc5636f5ca57fae44f044b1b4.png","https://baiduworld.baidu.com","百度世界大会",1731340800,{"end_time":413,"img":414,"link":415,"location":164,"name":416,"start_time":417},1732463999,"https://static001.infoq.cn/resource/image/d1/a0/d16ecacda10d8614fa0a2928f04f0da0.png","https://mp.weixin.qq.com/s/LmG1_1NTkvigdewqE-LQwA","蚂蚁 agentUniverse 征文活动",1729699200,{"end_time":419,"img":420,"link":421,"location":422,"name":423,"start_time":424},1729785599,"https://static001.infoq.cn/resource/image/a4/96/a4c947d9a4ddaed63c2ab7298285e996.jpg","https://hdxu.cn/fimi","武汉","鸿蒙1024程序员节",1729526400,{"end_time":426,"img":427,"link":428,"location":164,"name":400,"start_time":429},1731600000,"https://static001.infoq.cn/resource/image/07/e4/07336456945434c08c91f748f61ba3e4.png","https://sourl.co/q3rci3",1728835200,{"end_time":431,"img":432,"link":433,"location":164,"name":434,"start_time":435},1735660799,"https://static001.infoq.cn/resource/image/6b/c4/6be7d03702b715e359c0116d8e2e0dc4.jpg","https://aistudio.baidu.com/intro/awards","星河产业应用创新奖",1728489600,{"end_time":437,"img":438,"link":439,"location":164,"name":440,"start_time":441},1729007999,"https://static001.infoq.cn/resource/image/ba/43/baecfa1b25b5c028f12cdf7a953c7d43.jpg","https://www.volcengine.com/contact/videocloud?utm_campaign=20241015&utm_content=shipinyunjishudahui&utm_medium=in_mkt&utm_source=event&utm_term=infoQ","2024火山引擎视频云技术大会",1728403200,{"end_time":443,"img":444,"link":445,"location":164,"name":446,"start_time":447},1727711999,"https://static001.infoq.cn/resource/image/90/d5/900f755fb922f23ac75d1e1e0e0b93d5.png","https://developer.huawei.com/consumer/cn/training/classDetail/e6608f8c416f427a847ecf717e9ed8d4?ha_source=InfoQ&ha_sourceId=70000011","HarmonyOS开发者基础认证",1721232000,[449,452,455,458,461,464,467,469,472,475,478],{"icon":6,"link":450,"name":451},"https://www.infoq.cn/","首页",{"icon":76,"link":453,"name":454},"https://www.infoq.cn/archives","AI会议",{"icon":76,"link":456,"name":457},"https://time.geekbang.org/resource?pt=1","AI课程",{"icon":76,"link":459,"name":460},"https://agicamp.com/ranking-list/?utm_source=infoqbar","AI应用",{"icon":6,"link":462,"name":463},"https://www.infoq.cn/zones/chinatechawards2025/","AI榜单",{"icon":6,"link":465,"name":466},"https://www.infoq.cn/zones/harmonyos/","HarmonyOS",{"icon":76,"link":251,"name":468},"AI大赛",{"icon":6,"link":470,"name":471},"https://www.infoq.cn/minibook","报告",{"icon":6,"link":473,"name":474},"https://www.infoq.cn/video","视频",{"icon":6,"link":476,"name":477},"https://zhinan.geekbang.com/?utm_source=geektimeweb&utm_medium=menu&gk_source=20241016_geektimeweb_menu","AI指南",{"icon":6,"link":479,"name":480},"https://www.infoq.cn/research","研究中心",{"authorData":482,"id":490,"aid":491,"aidint":492,"type":14,"views":493,"uuid":494,"status":14,"publish_time":495,"ctime":496,"utime":496,"vid":6,"source":14,"sub_status":7,"ip_address":6,"score":495,"article_title":497,"article_sharetitle":497,"article_subtitle":6,"article_summary":498,"article_cover":499,"article_cover_point":500,"author":489,"translator":501,"planner":507,"topic":513,"is_collect":536,"no_author":6,"is_promotion":536,"share_pic":6,"sub_type":7,"comment_user":7,"comment_count":14,"speaker_title":6,"speaker_introduce":6,"video_status":7,"duration":6,"total_duration":6,"label":537,"out_id":11,"word_count":538,"front_type":14,"content_short":6,"is_fill_info":7,"show_subtitle":6,"content":539,"ebook":1541,"love":14,"is_love":536,"copyright":14,"lead_author":7,"ppt_url":6,"publisher":1542,"definition":11,"read_status":7,"collect":515,"checker":11,"outlines":11,"content_url":1543,"themes":1544,"audio_status":7,"audio_url":6,"audio_size":7,"ebook_type":7,"video":1545,"form_id":7,"topicIdsMustBeSelected":1546,"topicNamesMustBeSelected":1547,"themeIds":1548,"themeNames":1549},{"uid":483,"nickname":484,"avatar":6,"active":14,"is_early":7,"ucode":485,"uri":486,"author_type":7,"vip":7,"authorLabel":487,"isAuthor":488,"list":489},3009494,"Yong Cui","0CE5A563E9CE0A","/profile/0CE5A563E9CE0A/","作者",true,[482],160494,"161044",161044,20303,"MgtgoehSqE4Sa2dUqzAw",1653037599973,1653037602070,"PyScript:让 Python 脚本在 Web 中跑起来","累计收获 10k Stars,PyScript 具有光明的未来。","https://static001.infoq.cn/resource/image/b7/e1/b7de42e4b909b771ac1f04e383d4f8e1.png","{\"big\":{\"point\":{\"x\":5,\"y\":5,\"w\":1388,\"h\":781}},\"small\":{\"point\":{\"x\":281,\"y\":152,\"w\":854,\"h\":481}},\"width\":1400,\"height\":787}",[502],{"uid":503,"nickname":504,"avatar":6,"active":14,"is_early":7,"ucode":505,"uri":506,"author_type":7,"vip":7},1368875,"平川","4D6E74F678F49C","/profile/4D6E74F678F49C/",[508],{"uid":509,"nickname":510,"avatar":6,"active":14,"is_early":7,"ucode":511,"uri":512,"author_type":7,"vip":7},1439149,"邓艳琴","D459E9DD515679","/profile/D459E9DD515679/",[514,516,519,523,526,530,533],{"id":48,"name":49,"alias":6,"type":515},2,{"id":14,"name":517,"alias":518,"type":14},"语言 & 开发","development",{"id":520,"name":521,"alias":522,"type":14},32,"编程语言","programing-languages",{"id":524,"name":525,"alias":525,"type":14},1121,"GMTC",{"id":527,"name":528,"alias":529,"type":515},50,"Python","python",{"id":531,"name":532,"alias":6,"type":515},1151,"Web",{"id":534,"name":535,"alias":6,"type":515},1180,"框架",false,[],2422,{"type":540,"content":541},"doc",[542,552,563,584,591,606,613,621,630,687,694,714,716,727,729,735,746,753,761,855,862,870,872,878,880,886,896,903,911,919,950,957,965,967,973,975,981,991,998,1029,1036,1042,1085,1093,1124,1126,1132,1134,1140,1150,1157,1165,1256,1263,1289,1291,1297,1299,1305,1315,1322,1341,1349,1351,1359,1366,1386,1388,1394,1396,1402,1412,1419,1449,1457,1459,1467,1474,1482,1489,1497,1504,1512,1514,1525,1527],{"type":543,"content":544},"blockquote",[545],{"type":546,"attrs":547,"content":548},"paragraph",{"indent":7,"number":7,"align":11,"origin":11},[549],{"type":550,"text":551},"text","这是下一个大事件吗?如果继续发展下去,有可能。",{"type":546,"attrs":553,"content":554},{"indent":7,"number":7,"align":11,"origin":11},[555],{"type":550,"marks":556,"text":562},[557],{"type":558,"attrs":559},"color",{"color":560,"name":561},"#494949","user"," ",{"type":546,"attrs":564,"content":565},{"indent":7,"number":7,"align":11,"origin":11},[566,571,579],{"type":550,"marks":567,"text":570},[568],{"type":558,"attrs":569},{"color":560,"name":561},"在 2022年PyCon 美国大会期间,作为主题演讲嘉宾之一的 Peter Wang 公布了 ",{"type":572,"attrs":573,"content":576},"link",{"href":574,"title":575,"type":11},"https://github.com/pyscript/pyscript","xxx",[577],{"type":550,"text":578},"PyScript",{"type":550,"marks":580,"text":583},[581],{"type":558,"attrs":582},{"color":560,"name":561},",一种在 HTML 中直接编写 Python 脚本的方法。或许你不知道 Peter,但你可能听说过 Anaconda,这是一种流行的开源的 Python 和 R 语言的发行版本,特别关注数据科学。Peter 正是 Anaconda 的 CEO 和联合创始人。",{"type":546,"attrs":585,"content":586},{"indent":7,"number":7,"align":11,"origin":11},[587],{"type":550,"marks":588,"text":562},[589],{"type":558,"attrs":590},{"color":560,"name":561},{"type":546,"attrs":592,"content":593},{"indent":7,"number":7,"align":11,"origin":11},[594,599,601],{"type":550,"marks":595,"text":598},[596],{"type":558,"attrs":597},{"color":560,"name":561},"换言之,PyScript 是由一家著名的科技公司开发的,这可能会保证它在不久的将来成为可行的方案。它在 Python 和 Web 开发者中受到了极大的关注,",{"type":550,"text":600},"GitHub",{"type":550,"marks":602,"text":605},[603],{"type":558,"attrs":604},{"color":560,"name":561}," 上已有超过 10k 颗 Stars。然而,它是否能成为一个成功的、有竞争力的产品,取决于长期的时间和开发投入。目前,它还有一些已知的缺陷(将在最后讨论)。",{"type":546,"attrs":607,"content":608},{"indent":7,"number":7,"align":11,"origin":11},[609],{"type":550,"marks":610,"text":562},[611],{"type":558,"attrs":612},{"color":560,"name":561},{"type":546,"attrs":614,"content":615},{"indent":7,"number":7,"align":11,"origin":11},[616],{"type":550,"marks":617,"text":620},[618],{"type":558,"attrs":619},{"color":560,"name":561},"闲话少说,让我们快速了解一下这个令人振奋的产品吧!",{"type":622,"attrs":623,"content":624},"heading",{"align":11,"level":14},[625],{"type":550,"marks":626,"text":629},[627],{"type":558,"attrs":628},{"color":560,"name":561},"py-script标签",{"type":546,"attrs":631,"content":632},{"indent":7,"number":7,"align":11,"origin":11},[633,638,646,651,658,663,670,675,682],{"type":550,"marks":634,"text":637},[635],{"type":558,"attrs":636},{"color":560,"name":561},"我们知道,HTML 文件是大多数网站最常见的元素。在创建网站时,我们的工作就是直接或间接地通过一些框架来编制 HTML 文件。在典型的 HTML 文件中,你会看到各种类型的标签。例如,",{"type":639,"content":640,"marks":643},"codeinline",[641],{"type":550,"text":642},"\u003Chead>",[644],{"type":558,"attrs":645},{"color":560,"name":561},{"type":550,"marks":647,"text":650},[648],{"type":558,"attrs":649},{"color":560,"name":561},"定义了HTML页面的元数据和关键信息,",{"type":639,"content":652,"marks":655},[653],{"type":550,"text":654},"\u003Ctitle>",[656],{"type":558,"attrs":657},{"color":560,"name":561},{"type":550,"marks":659,"text":662},[660],{"type":558,"attrs":661},{"color":560,"name":561},"是整个文档的标题,而",{"type":639,"content":664,"marks":667},[665],{"type":550,"text":666},"\u003Ch1>",[668],{"type":558,"attrs":669},{"color":560,"name":561},{"type":550,"marks":671,"text":674},[672],{"type":558,"attrs":673},{"color":560,"name":561},"、",{"type":639,"content":676,"marks":679},[677],{"type":550,"text":678},"\u003Ch2>",[680],{"type":558,"attrs":681},{"color":560,"name":561},{"type":550,"marks":683,"text":686},[684],{"type":558,"attrs":685},{"color":560,"name":561},"等定义了不同级别的内容标题。",{"type":546,"attrs":688,"content":689},{"indent":7,"number":7,"align":11,"origin":11},[690],{"type":550,"marks":691,"text":562},[692],{"type":558,"attrs":693},{"color":560,"name":561},{"type":546,"attrs":695,"content":696},{"indent":7,"number":7,"align":11,"origin":11},[697,702,709],{"type":550,"marks":698,"text":701},[699],{"type":558,"attrs":700},{"color":560,"name":561},"如前所述,PyScript 允许你在 HTML 中编写Python脚本,它使用一个特殊的标签",{"type":639,"content":703,"marks":706},[704],{"type":550,"text":705},"py-script",[707],{"type":558,"attrs":708},{"color":560,"name":561},{"type":550,"marks":710,"text":713},[711],{"type":558,"attrs":712},{"color":560,"name":561},"。在这个标签中,你可以嵌入 Python 脚本。要了解它是如何工作的,可以创建一个 HTML 文件,其中包含以下代码,并使用 Chrome 浏览器打开该文件。在 Chrome 浏览器中,你应该能够看到类似下面这样的内容:",{"type":546,"attrs":715},{"indent":7,"number":7,"align":11,"origin":11},{"type":717,"attrs":718},"image",{"src":719,"alt":11,"title":11,"style":720,"href":11,"fromPaste":488,"pastePass":488},"https://static001.geekbang.org/infoq/b7/b7cf3649eb920dfd76b246074c54a8f0.png",[721,724],{"key":722,"value":723},"width","75%",{"key":725,"value":726},"bordertype","none",{"type":546,"attrs":728},{"indent":7,"number":7,"align":11,"origin":11},{"type":717,"attrs":730},{"src":731,"alt":11,"title":11,"style":732,"href":11,"fromPaste":488,"pastePass":488},"https://static001.geekbang.org/infoq/d1/d1c8a6e49c89d1695ab45b26f726d77e.png",[733,734],{"key":722,"value":723},{"key":725,"value":726},{"type":546,"attrs":736,"content":738},{"indent":7,"number":7,"align":737,"origin":11},"center",[739],{"type":550,"marks":740,"text":745},[741],{"type":742,"attrs":743},"size",{"size":744},9,"作者截图",{"type":546,"attrs":747,"content":748},{"indent":7,"number":7,"align":11,"origin":11},[749],{"type":550,"marks":750,"text":562},[751],{"type":558,"attrs":752},{"color":560,"name":561},{"type":546,"attrs":754,"content":755},{"indent":7,"number":7,"align":11,"origin":11},[756],{"type":550,"marks":757,"text":760},[758],{"type":558,"attrs":759},{"color":560,"name":561},"在上面的代码片段中,你可能已经注意到以下三个关键点:",{"type":762,"content":763},"bulletedlist",[764,789,827],{"type":765,"attrs":766,"content":767},"listitem",{"listStyle":11},[768],{"type":546,"attrs":769,"content":770},{"indent":7,"number":7,"align":11,"origin":11},[771,778,780,787],{"type":639,"content":772,"marks":774},[773],{"type":550,"text":572},[775],{"type":558,"attrs":776},{"color":777,"name":561},"#292929",{"type":550,"text":779},"标签定义了一个外部样式表。在这个例子中,我们使用了 PyScript 提供的",{"type":639,"content":781,"marks":784},[782],{"type":550,"text":783},"css",[785],{"type":558,"attrs":786},{"color":777,"name":561},{"type":550,"text":788},"文件。",{"type":765,"attrs":790,"content":791},{"listStyle":11},[792],{"type":546,"attrs":793,"content":794},{"indent":7,"number":7,"align":11,"origin":11},[795,800,807,809,816,818,825],{"type":550,"marks":796,"text":799},[797],{"type":558,"attrs":798},{"color":560,"name":561},"我们使用",{"type":639,"content":801,"marks":804},[802],{"type":550,"text":803},"script",[805],{"type":558,"attrs":806},{"color":777,"name":561},{"type":550,"text":808},"标签来嵌入一个由",{"type":639,"content":810,"marks":813},[811],{"type":550,"text":812},"src",[814],{"type":558,"attrs":815},{"color":777,"name":561},{"type":550,"text":817},"定义、由 PyScript 托管的外部脚本。我们使用了",{"type":639,"content":819,"marks":822},[820],{"type":550,"text":821},"defer",[823],{"type":558,"attrs":824},{"color":777,"name":561},{"type":550,"text":826},",这样脚本会在下载和页面解析完成后执行——本质上是一种延迟执行,而不是实时执行。",{"type":765,"attrs":828,"content":829},{"listStyle":11},[830],{"type":546,"attrs":831,"content":832},{"indent":7,"number":7,"align":11,"origin":11},[833,838,844,846,853],{"type":550,"marks":834,"text":837},[835],{"type":558,"attrs":836},{"color":560,"name":561},"最有趣的部分是",{"type":639,"content":839,"marks":841},[840],{"type":550,"text":705},[842],{"type":558,"attrs":843},{"color":777,"name":561},{"type":550,"text":845},"标签。如你所见,",{"type":639,"content":847,"marks":850},[848],{"type":550,"text":849},"print(\"Hello, World!\")",[851],{"type":558,"attrs":852},{"color":777,"name":561},{"type":550,"text":854},"是 Python 代码。当执行 HTML 文件时,就可以看到代码求值结果。",{"type":546,"attrs":856,"content":857},{"indent":7,"number":7,"align":11,"origin":11},[858],{"type":550,"marks":859,"text":562},[860],{"type":558,"attrs":861},{"color":560,"name":561},{"type":546,"attrs":863,"content":864},{"indent":7,"number":7,"align":11,"origin":11},[865],{"type":550,"marks":866,"text":869},[867],{"type":558,"attrs":868},{"color":560,"name":561},"这很酷,不是吗?如果你不熟悉 Web 开发,但了解 Python,就可以使用 PyScript 嵌入任何有效的 Python 代码。让我们再看一个例子。",{"type":546,"attrs":871},{"indent":7,"number":7,"align":11,"origin":11},{"type":717,"attrs":873},{"src":874,"alt":11,"title":11,"style":875,"href":11,"fromPaste":488,"pastePass":488},"https://static001.geekbang.org/infoq/80/80c04d7afe33fd0f4d34f391847a8e75.png",[876,877],{"key":722,"value":723},{"key":725,"value":726},{"type":546,"attrs":879},{"indent":7,"number":7,"align":11,"origin":11},{"type":717,"attrs":881},{"src":882,"alt":11,"title":11,"style":883,"href":11,"fromPaste":488,"pastePass":488},"https://static001.geekbang.org/infoq/ff/ff83f9e4bfead1f156366ce957063170.png",[884,885],{"key":722,"value":723},{"key":725,"value":726},{"type":546,"attrs":887,"content":888},{"indent":7,"number":7,"align":737,"origin":11},[889],{"type":550,"marks":890,"text":895},[891,893],{"type":742,"attrs":892},{"size":744},{"type":558,"attrs":894},{"color":560,"name":561},"另一个PyScript示例(图片由作者提供)",{"type":546,"attrs":897,"content":898},{"indent":7,"number":7,"align":11,"origin":11},[899],{"type":550,"marks":900,"text":562},[901],{"type":558,"attrs":902},{"color":560,"name":561},{"type":546,"attrs":904,"content":905},{"indent":7,"number":7,"align":11,"origin":11},[906],{"type":550,"marks":907,"text":910},[908],{"type":558,"attrs":909},{"color":560,"name":561},"在这里,我们写了一些需要计算的代码,可以看到,脚本得到了正确的执行。",{"type":622,"attrs":912,"content":913},{"align":11,"level":14},[914],{"type":550,"marks":915,"text":918},[916],{"type":558,"attrs":917},{"color":560,"name":561},"py-env标签",{"type":546,"attrs":920,"content":921},{"indent":7,"number":7,"align":11,"origin":11},[922,927,934,939,945],{"type":550,"marks":923,"text":926},[924],{"type":558,"attrs":925},{"color":560,"name":561},"在编写更复杂的代码时,就需要使用第三方库。在这种情况下,我们可以利用",{"type":639,"content":928,"marks":931},[929],{"type":550,"text":930},"py-env",[932],{"type":558,"attrs":933},{"color":560,"name":561},{"type":550,"marks":935,"text":938},[936],{"type":558,"attrs":937},{"color":560,"name":561},"标签。你可能已经猜到的,env 是 environment 的缩写。",{"type":639,"content":940,"marks":942},[941],{"type":550,"text":930},[943],{"type":558,"attrs":944},{"color":560,"name":561},{"type":550,"marks":946,"text":949},[947],{"type":558,"attrs":948},{"color":560,"name":561},"标签中列出了运行代码所需的 Python 包。",{"type":546,"attrs":951,"content":952},{"indent":7,"number":7,"align":11,"origin":11},[953],{"type":550,"marks":954,"text":562},[955],{"type":558,"attrs":956},{"color":560,"name":561},{"type":546,"attrs":958,"content":959},{"indent":7,"number":7,"align":11,"origin":11},[960],{"type":550,"marks":961,"text":964},[962],{"type":558,"attrs":963},{"color":560,"name":561},"你可能知道,许多数据科学家都使用 pandas 进行数据处理工作。让我们看看下面的例子。",{"type":546,"attrs":966},{"indent":7,"number":7,"align":11,"origin":11},{"type":717,"attrs":968},{"src":969,"alt":11,"title":11,"style":970,"href":11,"fromPaste":488,"pastePass":488},"https://static001.geekbang.org/infoq/81/81a2e07ff71a317924c7664120862b6e.png",[971,972],{"key":722,"value":723},{"key":725,"value":726},{"type":546,"attrs":974},{"indent":7,"number":7,"align":11,"origin":11},{"type":717,"attrs":976},{"src":977,"alt":11,"title":11,"style":978,"href":11,"fromPaste":488,"pastePass":488},"https://static001.geekbang.org/infoq/df/df79380011e061d1030cfe721b89989b.png",[979,980],{"key":722,"value":723},{"key":725,"value":726},{"type":546,"attrs":982,"content":983},{"indent":7,"number":7,"align":737,"origin":11},[984],{"type":550,"marks":985,"text":990},[986,988],{"type":742,"attrs":987},{"size":744},{"type":558,"attrs":989},{"color":560,"name":561},"使用包的PyScript(图片由作者提供)",{"type":546,"attrs":992,"content":993},{"indent":7,"number":7,"align":11,"origin":11},[994],{"type":550,"marks":995,"text":562},[996],{"type":558,"attrs":997},{"color":560,"name":561},{"type":546,"attrs":999,"content":1000},{"indent":7,"number":7,"align":11,"origin":11},[1001,1006,1012,1017,1024],{"type":550,"marks":1002,"text":1005},[1003],{"type":558,"attrs":1004},{"color":560,"name":561},"如你所见,我们在",{"type":639,"content":1007,"marks":1009},[1008],{"type":550,"text":930},[1010],{"type":558,"attrs":1011},{"color":560,"name":561},{"type":550,"marks":1013,"text":1016},[1014],{"type":558,"attrs":1015},{"color":560,"name":561},"标签中指定了依赖项(即 Pandas),该标签包含在",{"type":639,"content":1018,"marks":1021},[1019],{"type":550,"text":1020},"head",[1022],{"type":558,"attrs":1023},{"color":560,"name":561},{"type":550,"marks":1025,"text":1028},[1026],{"type":558,"attrs":1027},{"color":560,"name":561},"标签中。如果页面需要多个依赖项,可以在这里把它们全部列出:",{"type":546,"attrs":1030,"content":1031},{"indent":7,"number":7,"align":11,"origin":11},[1032],{"type":550,"marks":1033,"text":562},[1034],{"type":558,"attrs":1035},{"color":560,"name":561},{"type":1037,"attrs":1038,"content":1039},"codeblock",{"lang":11},[1040],{"type":550,"text":1041},"\u003Cpy-env>\n - pandas\n - matplotlib\n - numpy\n\u003C/py-env>",{"type":546,"attrs":1043,"content":1044},{"indent":7,"number":7,"align":11,"origin":11},[1045,1050,1056,1061,1068,1073,1080],{"type":550,"marks":1046,"text":1049},[1047],{"type":558,"attrs":1048},{"color":560,"name":561},"如你所见,在",{"type":639,"content":1051,"marks":1053},[1052],{"type":550,"text":705},[1054],{"type":558,"attrs":1055},{"color":560,"name":561},{"type":550,"marks":1057,"text":1060},[1058],{"type":558,"attrs":1059},{"color":560,"name":561},"标签中,我们确实可以使用 Pandas 库来创建一个",{"type":639,"content":1062,"marks":1065},[1063],{"type":550,"text":1064},"DataFrame",[1066],{"type":558,"attrs":1067},{"color":560,"name":561},{"type":550,"marks":1069,"text":1072},[1070],{"type":558,"attrs":1071},{"color":560,"name":561},"对象。然而,当我们把打印出来时就会发现,它是一个单行,而不是一个结构化的数据表。没有一个适当的结构,我们就无法理解这些数据。幸运的是,我们可以使用",{"type":639,"content":1074,"marks":1077},[1075],{"type":550,"text":1076},"write",[1078],{"type":558,"attrs":1079},{"color":560,"name":561},{"type":550,"marks":1081,"text":1084},[1082],{"type":558,"attrs":1083},{"color":560,"name":561},"函数(下文会讨论)。",{"type":622,"attrs":1086,"content":1087},{"align":11,"level":14},[1088],{"type":550,"marks":1089,"text":1092},[1090],{"type":558,"attrs":1091},{"color":560,"name":561},"将内容写入指定标签",{"type":546,"attrs":1094,"content":1095},{"indent":7,"number":7,"align":11,"origin":11},[1096,1101,1108,1113,1119],{"type":550,"marks":1097,"text":1100},[1098],{"type":558,"attrs":1099},{"color":560,"name":561},"除了Python中的标准打印函数",{"type":639,"content":1102,"marks":1105},[1103],{"type":550,"text":1104},"print",[1106],{"type":558,"attrs":1107},{"color":560,"name":561},{"type":550,"marks":1109,"text":1112},[1110],{"type":558,"attrs":1111},{"color":560,"name":561},",作为脚本的一部分,PyScript有自己的",{"type":639,"content":1114,"marks":1116},[1115],{"type":550,"text":1076},[1117],{"type":558,"attrs":1118},{"color":560,"name":561},{"type":550,"marks":1120,"text":1123},[1121],{"type":558,"attrs":1122},{"color":560,"name":561},"函数,可以将数据发送到页面上指定的Web元素中。请看下面的例子:",{"type":546,"attrs":1125},{"indent":7,"number":7,"align":11,"origin":11},{"type":717,"attrs":1127},{"src":1128,"alt":11,"title":11,"style":1129,"href":11,"fromPaste":488,"pastePass":488},"https://static001.geekbang.org/infoq/54/548175e28244c2b86e5b35db19bdf9ff.png",[1130,1131],{"key":722,"value":723},{"key":725,"value":726},{"type":546,"attrs":1133},{"indent":7,"number":7,"align":11,"origin":11},{"type":717,"attrs":1135},{"src":1136,"alt":11,"title":11,"style":1137,"href":11,"fromPaste":488,"pastePass":488},"https://static001.geekbang.org/infoq/f6/f612d73015a7a21224b20561347bf3b2.png",[1138,1139],{"key":722,"value":723},{"key":725,"value":726},{"type":546,"attrs":1141,"content":1142},{"indent":7,"number":7,"align":737,"origin":11},[1143],{"type":550,"marks":1144,"text":1149},[1145,1147],{"type":742,"attrs":1146},{"size":744},{"type":558,"attrs":1148},{"color":560,"name":561},"PyScript 写函数 write(图片由作者提供)",{"type":546,"attrs":1151,"content":1152},{"indent":7,"number":7,"align":11,"origin":11},[1153],{"type":550,"marks":1154,"text":562},[1155],{"type":558,"attrs":1156},{"color":560,"name":561},{"type":546,"attrs":1158,"content":1159},{"indent":7,"number":7,"align":11,"origin":11},[1160],{"type":550,"marks":1161,"text":1164},[1162],{"type":558,"attrs":1163},{"color":560,"name":561},"与之前的例子相比,上述代码片段有两个重大变化:",{"type":762,"content":1166},[1167,1196],{"type":765,"attrs":1168,"content":1169},{"listStyle":11},[1170],{"type":546,"attrs":1171,"content":1172},{"indent":7,"number":7,"align":11,"origin":11},[1173,1178,1185,1187,1194],{"type":550,"marks":1174,"text":1177},[1175],{"type":558,"attrs":1176},{"color":560,"name":561},"我们现在定义了一个 id 为",{"type":639,"content":1179,"marks":1182},[1180],{"type":550,"text":1181},"\"DataFrame\"",[1183],{"type":558,"attrs":1184},{"color":777,"name":561},{"type":550,"text":1186},"的",{"type":639,"content":1188,"marks":1191},[1189],{"type":550,"text":1190},"div",[1192],{"type":558,"attrs":1193},{"color":777,"name":561},{"type":550,"text":1195},",这样稍后就可以引用。",{"type":765,"attrs":1197,"content":1198},{"listStyle":11},[1199],{"type":546,"attrs":1200,"content":1201},{"indent":7,"number":7,"align":11,"origin":11},[1202,1207,1213,1215,1221,1223,1229,1231,1238,1240,1246,1248,1254],{"type":550,"marks":1203,"text":1206},[1204],{"type":558,"attrs":1205},{"color":560,"name":561},"在",{"type":639,"content":1208,"marks":1210},[1209],{"type":550,"text":705},[1211],{"type":558,"attrs":1212},{"color":777,"name":561},{"type":550,"text":1214},"标签中,我们创建一个与之前相同的",{"type":639,"content":1216,"marks":1218},[1217],{"type":550,"text":1064},[1219],{"type":558,"attrs":1220},{"color":777,"name":561},{"type":550,"text":1222},"对象。但现在,我们不是调用",{"type":639,"content":1224,"marks":1226},[1225],{"type":550,"text":1104},[1227],{"type":558,"attrs":1228},{"color":777,"name":561},{"type":550,"text":1230},",而是调用",{"type":639,"content":1232,"marks":1235},[1233],{"type":550,"text":1234},"pyscript.write",[1236],{"type":558,"attrs":1237},{"color":777,"name":561},{"type":550,"text":1239},"函数,请求 PyScript 处理并在",{"type":639,"content":1241,"marks":1243},[1242],{"type":550,"text":1181},[1244],{"type":558,"attrs":1245},{"color":777,"name":561},{"type":550,"text":1247},"中显示",{"type":639,"content":1249,"marks":1251},[1250],{"type":550,"text":1064},[1252],{"type":558,"attrs":1253},{"color":777,"name":561},{"type":550,"text":1255},"对象。从输出可以看到,我们现在有一个结构化的表格了。",{"type":546,"attrs":1257,"content":1258},{"indent":7,"number":7,"align":11,"origin":11},[1259],{"type":550,"marks":1260,"text":562},[1261],{"type":558,"attrs":1262},{"color":560,"name":561},{"type":546,"attrs":1264,"content":1265},{"indent":7,"number":7,"align":11,"origin":11},[1266,1272,1277,1284],{"type":639,"content":1267,"marks":1269},[1268],{"type":550,"text":1076},[1270],{"type":558,"attrs":1271},{"color":560,"name":561},{"type":550,"marks":1273,"text":1276},[1274],{"type":558,"attrs":1275},{"color":560,"name":561},"函数不仅能够打印表格,还能够打印数字。下面的例子向你展示了我们如何使用",{"type":639,"content":1278,"marks":1281},[1279],{"type":550,"text":1280},"matplotlib",[1282],{"type":558,"attrs":1283},{"color":560,"name":561},{"type":550,"marks":1285,"text":1288},[1286],{"type":558,"attrs":1287},{"color":560,"name":561},"(一个流行的Python包,用于数据可视化)来显示由 Python 创建的图。",{"type":546,"attrs":1290},{"indent":7,"number":7,"align":11,"origin":11},{"type":717,"attrs":1292},{"src":1293,"alt":11,"title":11,"style":1294,"href":11,"fromPaste":488,"pastePass":488},"https://static001.geekbang.org/infoq/67/67aa8e871dffbace046e760e4249ec4d.png",[1295,1296],{"key":722,"value":723},{"key":725,"value":726},{"type":546,"attrs":1298},{"indent":7,"number":7,"align":11,"origin":11},{"type":717,"attrs":1300},{"src":1301,"alt":11,"title":11,"style":1302,"href":11,"fromPaste":488,"pastePass":488},"https://static001.geekbang.org/infoq/9c/9c5c42ab5a569023ab63df58dfbedcab.png",[1303,1304],{"key":722,"value":723},{"key":725,"value":726},{"type":546,"attrs":1306,"content":1307},{"indent":7,"number":7,"align":737,"origin":11},[1308],{"type":550,"marks":1309,"text":1314},[1310,1312],{"type":742,"attrs":1311},{"size":744},{"type":558,"attrs":1313},{"color":560,"name":561},"PyScript打印图(图片由作者提供)",{"type":546,"attrs":1316,"content":1317},{"indent":7,"number":7,"align":11,"origin":11},[1318],{"type":550,"marks":1319,"text":562},[1320],{"type":558,"attrs":1321},{"color":560,"name":561},{"type":546,"attrs":1323,"content":1324},{"indent":7,"number":7,"align":11,"origin":11},[1325,1330,1336],{"type":550,"marks":1326,"text":1329},[1327],{"type":558,"attrs":1328},{"color":560,"name":561},"如你所见,",{"type":639,"content":1331,"marks":1333},[1332],{"type":550,"text":1076},[1334],{"type":558,"attrs":1335},{"color":560,"name":561},{"type":550,"marks":1337,"text":1340},[1338],{"type":558,"attrs":1339},{"color":560,"name":561}," 函数以期望的方式显示了图。",{"type":622,"attrs":1342,"content":1343},{"align":11,"level":14},[1344],{"type":550,"marks":1345,"text":1348},[1346],{"type":558,"attrs":1347},{"color":560,"name":561},"py-repl标签",{"type":546,"attrs":1350},{"indent":7,"number":7,"align":11,"origin":11},{"type":546,"attrs":1352,"content":1353},{"indent":7,"number":7,"align":11,"origin":11},[1354],{"type":550,"marks":1355,"text":1358},[1356],{"type":558,"attrs":1357},{"color":560,"name":561},"Python 学习的最好方法之一是使用 REPL:读取(Read)、求值(Evaluate)、打印(Print)和循环(Loop)。也就是说,使用一个交互式的 Python 控制台,输入一些代码,Python 对其进行求值并打印适当的输出,然后重复这个过程。Web 页面也可以提供这样的 REPL 环境,比如 Jupyter Notebook。",{"type":546,"attrs":1360,"content":1361},{"indent":7,"number":7,"align":11,"origin":11},[1362],{"type":550,"marks":1363,"text":562},[1364],{"type":558,"attrs":1365},{"color":560,"name":561},{"type":546,"attrs":1367,"content":1368},{"indent":7,"number":7,"align":11,"origin":11},[1369,1374,1381],{"type":550,"marks":1370,"text":1373},[1371],{"type":558,"attrs":1372},{"color":560,"name":561},"PyScript 可以使用",{"type":639,"content":1375,"marks":1378},[1376],{"type":550,"text":1377},"py-repl",[1379],{"type":558,"attrs":1380},{"color":560,"name":561},{"type":550,"marks":1382,"text":1385},[1383],{"type":558,"attrs":1384},{"color":560,"name":561},"标签提供与此类似的东西。在这个元素中,你可以让用户自己编写代码,也可以以编程方式输入代码。请看下面的例子:",{"type":546,"attrs":1387},{"indent":7,"number":7,"align":11,"origin":11},{"type":717,"attrs":1389},{"src":1390,"alt":11,"title":11,"style":1391,"href":11,"fromPaste":488,"pastePass":488},"https://static001.geekbang.org/infoq/b6/b66645cc4bc41c399659afaff9f3d7ee.png",[1392,1393],{"key":722,"value":723},{"key":725,"value":726},{"type":546,"attrs":1395},{"indent":7,"number":7,"align":11,"origin":11},{"type":717,"attrs":1397},{"src":1398,"alt":11,"title":11,"style":1399,"href":11,"fromPaste":488,"pastePass":488},"https://static001.geekbang.org/infoq/a7/a716f3728f2d077ead11eab508d64477.png",[1400,1401],{"key":722,"value":723},{"key":725,"value":726},{"type":546,"attrs":1403,"content":1404},{"indent":7,"number":7,"align":737,"origin":11},[1405],{"type":550,"marks":1406,"text":1411},[1407,1409],{"type":742,"attrs":1408},{"size":744},{"type":558,"attrs":1410},{"color":560,"name":561},"PyScript REPL(图片由作者提供)",{"type":546,"attrs":1413,"content":1414},{"indent":7,"number":7,"align":11,"origin":11},[1415],{"type":550,"marks":1416,"text":562},[1417],{"type":558,"attrs":1418},{"color":560,"name":561},{"type":546,"attrs":1420,"content":1421},{"indent":7,"number":7,"align":11,"origin":11},[1422,1427,1433,1438,1444],{"type":550,"marks":1423,"text":1426},[1424],{"type":558,"attrs":1425},{"color":560,"name":561},"如你所见,上图中有一个单元格,其中包括在",{"type":639,"content":1428,"marks":1430},[1429],{"type":550,"text":1377},[1431],{"type":558,"attrs":1432},{"color":560,"name":561},{"type":550,"marks":1434,"text":1437},[1435],{"type":558,"attrs":1436},{"color":560,"name":561},"标签中指定的代码。值得注意的是,单元格中的代码可以引用我们之前在",{"type":639,"content":1439,"marks":1441},[1440],{"type":550,"text":705},[1442],{"type":558,"attrs":1443},{"color":560,"name":561},{"type":550,"marks":1445,"text":1448},[1446],{"type":558,"attrs":1447},{"color":560,"name":561},"标签中定义的变量。一切看起来都很协调。",{"type":622,"attrs":1450,"content":1451},{"align":11,"level":14},[1452],{"type":550,"marks":1453,"text":1456},[1454],{"type":558,"attrs":1455},{"color":560,"name":561},"感想",{"type":546,"attrs":1458},{"indent":7,"number":7,"align":11,"origin":11},{"type":546,"attrs":1460,"content":1461},{"indent":7,"number":7,"align":11,"origin":11},[1462],{"type":550,"marks":1463,"text":1466},[1464],{"type":558,"attrs":1465},{"color":560,"name":561},"本文介绍的内容是现阶段 PyScript 所能提供的主要亮点。它似乎是一个很有前途的产品,因为它提供了一个灵活的框架,让 Python 程序员可以在没有太多 Web 开发知识的情况下创建 Web 应用。然而,也有其他类似的成功的产品,因此,竞争会很激烈。",{"type":546,"attrs":1468,"content":1469},{"indent":7,"number":7,"align":11,"origin":11},[1470],{"type":550,"marks":1471,"text":562},[1472],{"type":558,"attrs":1473},{"color":560,"name":561},{"type":546,"attrs":1475,"content":1476},{"indent":7,"number":7,"align":11,"origin":11},[1477],{"type":550,"marks":1478,"text":1481},[1479],{"type":558,"attrs":1480},{"color":560,"name":561},"例如,如果我需要为自己的数据科学项目创建一个 Web 应用,我就会直接使用 Streamlit。它的功能已经相对成熟。请注意,虽然都与 Web 开发有关,但 PyScript 和 Streamlit 属于不同的产品系。PyScript 应该更通用,因为它的目标是让你可以在任何网页上嵌入任何 Python 代码,Streamlit 做不到这一点。",{"type":546,"attrs":1483,"content":1484},{"indent":7,"number":7,"align":11,"origin":11},[1485],{"type":550,"marks":1486,"text":562},[1487],{"type":558,"attrs":1488},{"color":560,"name":561},{"type":546,"attrs":1490,"content":1491},{"indent":7,"number":7,"align":11,"origin":11},[1492],{"type":550,"marks":1493,"text":1496},[1494],{"type":558,"attrs":1495},{"color":560,"name":561},"在 PyScript 为更多的人所接受之前,它有几个问题必须解决。例如,Web 页面的加载速度非常慢。如果你尝试跟随本教程运行代码,可能就会注意到,在 Web 页面的显示会有一个明显的滞后。",{"type":546,"attrs":1498,"content":1499},{"indent":7,"number":7,"align":11,"origin":11},[1500],{"type":550,"marks":1501,"text":562},[1502],{"type":558,"attrs":1503},{"color":560,"name":561},{"type":546,"attrs":1505,"content":1506},{"indent":7,"number":7,"align":11,"origin":11},[1507],{"type":550,"marks":1508,"text":1511},[1509],{"type":558,"attrs":1510},{"color":560,"name":561},"尽管如此,我还是觉得这个产品会继续发展,我的信心主要来自于它的开发者——给我们带来极好的 Anaconda 工具的 Anaconda 团队。",{"type":546,"attrs":1513},{"indent":7,"number":7,"align":11,"origin":11},{"type":546,"attrs":1515,"content":1516},{"indent":7,"number":7,"align":11,"origin":11},[1517],{"type":550,"marks":1518,"text":1524},[1519,1521],{"type":1520},"italic",{"type":558,"attrs":1522},{"color":1523,"name":561},"#333333","本文最初发布于Better Programming。",{"type":546,"attrs":1526},{"indent":7,"number":7,"align":11,"origin":11},{"type":546,"attrs":1528,"content":1529},{"indent":7,"number":7,"align":11,"origin":11},[1530,1535],{"type":550,"marks":1531,"text":1534},[1532],{"type":558,"attrs":1533},{"color":560,"name":561},"查看英文原文:",{"type":572,"attrs":1536,"content":1538},{"href":1537,"title":575,"type":11},"https://betterprogramming.pub/running-python-script-on-the-web-using-pyscript-the-next-big-thing-8ace9543d75",[1539],{"type":550,"text":1540},"Running Python Scripts on the Web Using PyScript",{},{"uid":7,"nickname":6,"avatar":6,"active":7,"is_early":7,"ucode":6,"uri":6,"author_type":7,"vip":7,"mood":6,"intro":6,"is_sub":536},"https://static-acl-001.geekbang.org/resource/article/95a26bcb608b3462ef1fdcaa10c962f7/content.json?auth_key=1777429544-22fe08005793409388e9412c550ab61a-0-d2551b2c2403d33350b8f81ec2367687&v_t=1653037602070",[],{"ai_subtitle":6,"ai_subtitle_vtt":6,"subtitle_url":6,"show_subtitle":7,"manuscripts":11},[14,520,524],[517,521,525],[],[],[1551,1556,1562,1567,1574,1580,1586,1594,1599,1619,1652,1657,1663],{"id":1552,"pid":7,"name":1553,"url":450,"icon":6,"corner_mark":1554,"sort":14,"children":1555},1038,{"type":14,"text":451,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},[],{"id":1557,"pid":7,"name":1558,"url":453,"icon":6,"corner_mark":1559,"sort":515,"children":1561},1039,{"type":14,"text":454,"icon":6,"alt":6},{"type":515,"text":1560,"icon":6},"hot",[],{"id":1563,"pid":7,"name":1564,"url":456,"icon":6,"corner_mark":1565,"sort":57,"children":1566},1040,{"type":14,"text":457,"icon":6,"alt":6},{"type":515,"text":1560,"icon":6},[],{"id":1568,"pid":7,"name":1569,"url":1570,"icon":6,"corner_mark":1571,"sort":1572,"children":1573},1041,{"type":14,"text":460,"icon":6,"alt":6},"https://agicamp.com/?utm_source=infoqbar",{"type":515,"text":1560,"icon":6},4,[],{"id":1575,"pid":7,"name":1576,"url":470,"icon":6,"corner_mark":1577,"sort":1578,"children":1579},1045,{"type":14,"text":471,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},5,[],{"id":1581,"pid":7,"name":1582,"url":465,"icon":6,"corner_mark":1583,"sort":1584,"children":1585},1043,{"type":14,"text":466,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},6,[],{"id":1587,"pid":7,"name":1588,"url":189,"icon":6,"corner_mark":1590,"sort":1592,"children":1593},1053,{"type":14,"text":1589,"icon":6,"alt":6},"Snowflake",{"type":515,"text":1591,"icon":6},"new",7,[],{"id":1595,"pid":7,"name":1596,"url":473,"icon":6,"corner_mark":1597,"sort":34,"children":1598},1046,{"type":14,"text":474,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},[],{"id":1600,"pid":7,"name":1601,"url":6,"icon":6,"corner_mark":1603,"sort":744,"children":1604},1056,{"type":14,"text":1602,"icon":6,"alt":6},"企业专区",{"type":515,"text":1591,"icon":6},[1605,1612],{"id":1606,"pid":1600,"name":1607,"url":1609,"icon":6,"corner_mark":1610,"sort":14,"children":1611},1062,{"type":14,"text":1608,"icon":6,"alt":6},"arm专区","https://www.infoq.cn/zones/arm/",{"type":515,"text":1591,"icon":6},[],{"id":1613,"pid":1600,"name":1614,"url":1616,"icon":6,"corner_mark":1617,"sort":515,"children":1618},1057,{"type":14,"text":1615,"icon":6,"alt":6},"intel 专区","https://www.infoq.cn/zones/intel2025/",{"type":7,"text":6,"icon":6},[],{"id":1620,"pid":7,"name":1621,"url":251,"icon":6,"corner_mark":1622,"sort":1623,"children":1624},1044,{"type":14,"text":468,"icon":6,"alt":6},{"type":515,"text":1560,"icon":6},10,[1625,1631,1638,1645],{"id":1626,"pid":1620,"name":1627,"url":251,"icon":6,"corner_mark":1629,"sort":14,"children":1630},1049,{"type":14,"text":1628,"icon":6,"alt":6},"微众银行 · 深圳国际金融科技大赛",{"type":7,"text":6,"icon":6},[],{"id":1632,"pid":1620,"name":1633,"url":1635,"icon":6,"corner_mark":1636,"sort":515,"children":1637},1050,{"type":14,"text":1634,"icon":6,"alt":6},"亚马逊云科技 · 1000 AIdea 应用计划","https://www.infoq.cn/zones/1000aidea/#schedule",{"type":7,"text":6,"icon":6},[],{"id":1639,"pid":1620,"name":1640,"url":1642,"icon":6,"corner_mark":1643,"sort":57,"children":1644},1051,{"type":14,"text":1641,"icon":6,"alt":6},"微软 · AI 开发者挑战赛","https://www.infoq.cn/zones/microsoftai/",{"type":7,"text":6,"icon":6},[],{"id":1646,"pid":1620,"name":1647,"url":1649,"icon":6,"corner_mark":1650,"sort":1572,"children":1651},1052,{"type":14,"text":1648,"icon":6,"alt":6},"InfoQ · 大模型技术应用创新大赛","https://www.infoq.cn/zones/geekathon2023",{"type":7,"text":6,"icon":6},[],{"id":1653,"pid":7,"name":1654,"url":479,"icon":6,"corner_mark":1655,"sort":45,"children":1656},1048,{"type":14,"text":480,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},[],{"id":1658,"pid":7,"name":1659,"url":462,"icon":6,"corner_mark":1660,"sort":1661,"children":1662},1042,{"type":14,"text":463,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},12,[],{"id":1664,"pid":7,"name":1665,"url":476,"icon":6,"corner_mark":1667,"sort":1668,"children":1669},1047,{"type":14,"text":1666,"icon":6,"alt":6},"AI工具",{"type":7,"text":6,"icon":6},13,[1670,1678,1686,1694],{"id":1671,"pid":1664,"name":1672,"url":1674,"icon":6,"corner_mark":1675,"sort":1676,"children":1677},1065,{"type":14,"text":1673,"icon":6,"alt":6},"WorkBuddy","https://www.codebuddy.cn/work/?fromSource=gwzcw.11816099.11816099.11816099&utm_medium=cpc&utm_id=gwzcw.11816099.11816099.11816099",{"type":7,"text":6,"icon":6},1776761501,[],{"id":1679,"pid":1664,"name":1680,"url":1682,"icon":6,"corner_mark":1683,"sort":1684,"children":1685},1066,{"type":14,"text":1681,"icon":6,"alt":6},"QClaw-macOS(Apple芯片)版","https://cdn.qclaw.qq.com/qclaw/mac/arm64/0.1.13-5012-73/QClaw-0.1.13-5012-73-arm64.dmg",{"type":7,"text":6,"icon":6},1776761586,[],{"id":1687,"pid":1664,"name":1688,"url":1690,"icon":6,"corner_mark":1691,"sort":1692,"children":1693},1067,{"type":14,"text":1689,"icon":6,"alt":6},"QClaw-macOS(Intel芯片)版","https://cdn.qclaw.qq.com/qclaw/mac/x64/0.1.13-5012-73/QClaw-0.1.13-5012-73-x64.dmg",{"type":7,"text":6,"icon":6},1776761617,[],{"id":1695,"pid":1664,"name":1696,"url":1698,"icon":6,"corner_mark":1699,"sort":1700,"children":1701},1068,{"type":14,"text":1697,"icon":6,"alt":6},"QClaw-Windows版","https://cdn.qclaw.qq.com/qclaw/win/0.1.13-5012-146/QClaw-Setup-0.1.13-5012-146.exe",{"type":7,"text":6,"icon":6},1776761649,[],["Reactive",1703],{"$sisMobile":536},["Set"],["ShallowReactive",1706],{"navConfig":-1,"headerMenuList":-1,"articleDetail":-1},"/article/MgtgoehSqE4Sa2dUqzAw",{"loginUser":1709,"main":1713},{"loginUser":1710,"userInfo":1712},["EmptyRef",1711],"null",["EmptyRef",1711],{"isMobile":1714,"isBottom":1716,"nowTime":1717,"isImmersion":1719,"messageCount":1720,"pageAction":1722,"showHeaderNotice":1723,"showHeaderFriendship":1724,"noticeLinePopup":1725,"isArticlePage":1726},["EmptyRef",1715],"false",["EmptyRef",1715],["Ref",1718],1777431314302,["EmptyRef",1715],["EmptyRef",1721],"0",["EmptyRef",1711],["EmptyRef",1715],["EmptyRef",1715],["EmptyRef",1715],["EmptyRef",1715]]</script><script>window.__NUXT__={};window.__NUXT__.config={public:{siteUrl:"https://www.infoq.cn","nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"}},device:{defaultUserAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.39 Safari/537.36",enabled:true,refreshOnResize:false}},app:{baseURL:"/",buildId:"bc0c5b89-4309-4480-b41c-be9aea361312",buildAssetsDir:"static/web/nuxt/www.infoq.cn",cdnURL:"https://static001.geekbang.org"}}</script></body></html>