写点什么

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_8iiou_405"><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,iVBORw0KGgoAAAANSUhEUgAAABwAAAAeCAYAAAA/xX6fAAAAAXNSR0IArs4c6QAACTVJREFUSMell2mQVNUZhp977trbnZ6eno2ZYUQGBwYcWVQEcQEX3CoqxklijBURNa5lJValopVI/qiJGo1JJZYVt7gWpELcyiWyGEUEI4uCDCDCwDB793T39HL7bic/1FSZaBIr5+dXp96nvvec+s57FL7GuvXs7lhzvXKBp9VdnYyKTV5Qevqmhzf1fh0N5X/Z9KsrFrSYUX3F/kH1yq19ov39vT7JaMCCLt2dNyv+bntd8KQRMdcsu21N5v8C3n/NKXOdinbDrgGtZ/OeIH5gwCER8WhKR3DcKiMZgeMrdHdEWNhlFObPjLxSX288M7ExeLln9ergawF/uXzpDa9t9x7ctNsXbtXjjBNtLl2sEQt7SdoJnOIQVuoYdhy0efwlh96+CjVxlWsuSrJ82cyFM5bdtenLdMWXFU8HzRWR76/b5gqFkJXLbW46b5C2yDCtpQT29jzpAxZ2JWTpfJXHb4/xjQWSQtFn9RsZhsdGVnxVI+q/FpafnE7MW3Tsfc9tVC4cz7vcdV2ShTNCogMq6Wf3kljbx/CYQvsHOaz1/UyMepjdDZyxoJVcNcrGbRNUypXZv711Ufy6Gy/e/IenN1S/Evjzb8+9Q4+3PvLs28YZvX1Vzl9ksezkEDtjMP7QJrQg5BNCds5uYNo58zF6B6hmS2S3jlB3zmxO7I7x/IYcW3aVlb2HnYUp4Vx1yxUn9j/18radX2ppxo8vvGe137r/iIcqJJecnkBKG33VPvpVgTpvGm2+wgKthmBrH05hgsHuVuYcyZF7+UOaUgY9ZzcC8M6HJe5flWk4ackS4yvP0I6q46AggaPakszs7sAaUTD2HuLMXJnoX3dQaa3jmPcO4X/wMaJzKiet30OiUsVYuxNhxFgyN44EFAR2jUk0FT9896Vn1nwB+Ppj10577anbHzbMwP783jYnPfKH30PffQgrrGKFISKEsalt6NKlX9VQ2hqJyAAhJamBcaqFKl3dk7FMDZDUJGP0fvDB78+74aJ9W/6yciGABpBOp29WYumrJ9UKVOHjBwJD9UCoWEJFQ6Kh0KhAzfodGJ7HAgWCN7djSRCoxKRKEZ2IHSViQrWqUGurNDYnO4tODYFfugV4RwPQpLvYUjVaOmdRE99BJh8wlBVYkXrUDtDYgo5kdypB4qfnY+EQKBAOaWi/XEM88CnWxDGamhgadShVQAJNjUn8ahGhJREyPwtA27VqpaGLoEUTAiMokowFZPKCAwMuxbJG7XSbzOQm4m6F0ux2oo0xHKIIXSOsF0wcPxWvXGZk/iyOSsR5b90YrucBks6uJoqFCfS0gsBNA2gDYWTqUaZqVsb6CZ0sjSnYP6BQcUNefdfh+svryf3kXBItk5imSHy/QlwXSEXBr7VJPnANgRmlPp/HHc/w2KqPPhtgCsfOakfX+lAZxzIN++1nr7tMO7rF/o1KEBk9kkM3YszpyPHOzgAFhUdfHOWiszpJHNxLflc/6gvvUy5UGDmuDXvCI71viL2dU9B+uBRzv8vqfMjmrQMoKNSmLDpaQ5LJLiquihdXzLrGyvVaZXi/b9c10D5vEbvefIGFcxI89kqOShUK5ZB773iLO8e24ffMw/3BIjKjeZq70wjN5NDOERKd03Ef2sjYJxP8erwOkEjg7KUzSVg+jm+hYKGLIsWis1sbOPLxukq+f2l7qo6u0y9m/+b1zJ1R5e3tDgDG4DDIMtrTm5iwVSJHpxl6dTepSALhV6g8sAHFh4QiqNVSDH6GvKxnBhUnJBQqMuglzB9BKVdeF32Hs6uLhXzlwNYtFAdH6TxqJt9aOgmBBCChBOiKhpeM4y1rRbZHabzpBPTLutCOn0LytgtIKDGyUkUPJSCZMb2BU+fUUt/ait2QwvTHqA4NDpVHEq+pL77Tl/vuWV2zQ6F2GUIShC4WR9jWm2F4XOUjIuxWLdKqwobBCC3bCwxtHCO7rp/BbXmeOCg4UHD4kZzCAV9DIrlz5SlM1vrQ6tuxanxEUKWczfaNFkc+VLY8eu2dSli60UcmhKYhRYJk0ub5F1/mZ4/GcINPR49QQkKpoCmQSGgoCowXgk99+NQMJAqnLmjmqTunEK2pQ22YglcaJizlMMpZqmXvXfWSJZMWC885U5Eq8YZJmA3NZMf6Sekell6kWBFcd7FK0U0yOOqi6wpr7mnhhkuTlF2LXfvLXH5+M9XQJAg8nr13PhHDx9VjuG6WIDeIUS0iKzkyWf8+5akHz7UTpYmX9FA7pbaukdSME1DizYwNHKZwZCtaaQ++J9k3EKNUjTJ7qk/H0Y0ousae/Vmk79Hc0gChiivrqW+L4ceSaEoFo5JHc0qosko2I1c9t6b4PfXPr3xcPWte259MU5ssnWL30L5eLF0jPbmLaMNMysUKOEPEtDE6JoFdGyGQJmroYRkeibSNGZaJGipmcx1VXYfSOKpTIPDLqIHvF8vG3RveEDff+uST3j8zzUoQc+875+qEEt5bzFfjETtJa/cCZDRJZvcbUB3m8Ce9NLRMRSpVJrdNo+S5+H6IFoYYhglN01FLo/i6iohGMCfKB6Unlndc+Lv1//bibwDZVDPno0BUdrbW6efqujCLw5/glzPomiBaW08yFiOX6UMIIISqEyACB88PiNq1uH5IWYvgo0J+FCc7+vfRw4cGv7lk0YFn1n7ofCG1/fHHS38Rs6IrErZpG5ZULUtVfFXDtEyGhwfQNRW7th69NIIMRhgf96hJJcmNZ7GiMcxoFCtaRzQeQbpFCvkRXKeKomi4XnSftBeeuPjKlTntc2BHZ31jcXQg5Vc8FFchdGN4Uqdk1xOfdCxmxEYzE+iNJWTuIFG5B6kJaurSCKGiChW8AuXMKKoRIWLEMI0YE8WCLExknt86TuELHUopxbZnVvQUsyM3u5WJEwqlgpbNVAkQxGM2NekUkUQSNaww/dh2du74G1E9juNJgsBCRCy0aBxNB931Qj1i9quKstZ3eXrud55Y+x+D8MbnrppVGh4+LWaK0wL845H+JFNTTVAZHh6l87ipjA4eQlgNKCIGRlxO5Jy8GhGbyvnyW7Xp9PoBMbS1p2e1+7X/FlJKZd0jKybXmMxxvGJ3tZg/rrG1aXYhOyQTjW3vfrxrYHNhorTt+OPqt8/sWV38b3r/APXWEvG/78gJAAAAAElFTkSuQmCC" 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":1951,"once":1953,"_errors":1954,"serverRendered":896,"path":1956,"pinia":1957},["ShallowReactive",3],{"navConfig":4,"headerMenuList":737,"articleDetail":889},{"notice":5,"header":8,"footer":333,"bus":399,"web":705},{"content":6,"end_time":7,"link":6,"start_time":7,"time_now":7},"",0,[9,65,88,119,123,151,153,178,204,230,257,286,307,312,316,320,324,328],{"alias":10,"child_list":11,"icon":6,"id":63,"link":6,"name":64,"type":15}," industrynews",[12,16,20,24,28,31,35,39,43,47,50,53,57,60],{"id":13,"name":14,"alias":6,"type":15},1164,"英特尔",1,{"id":17,"name":18,"alias":19,"type":15},19,"Google","google",{"id":21,"name":22,"alias":23,"type":15},20,"微软","Microsoft",{"id":25,"name":26,"alias":27,"type":15},26,"亚马逊云科技","AWS",{"id":29,"name":30,"alias":30,"type":15},42,"Meta",{"id":32,"name":33,"alias":34,"type":15},54,"百度","baidu",{"id":36,"name":37,"alias":38,"type":15},61,"阿里巴巴","alibaba",{"id":40,"name":41,"alias":42,"type":15},78,"腾讯","tencent",{"id":44,"name":45,"alias":46,"type":15},145,"华为","huawei",{"id":48,"name":49,"alias":6,"type":15},1167,"字节跳动",{"id":51,"name":52,"alias":6,"type":15},1215,"用友",{"id":54,"name":55,"alias":56,"type":15},1217,"英伟达","NVIDIA",{"id":58,"name":59,"alias":59,"type":15},1218,"OpenAI",{"id":61,"name":62,"alias":6,"type":15},1221,"Snowflake",147,"企业动态",{"alias":6,"child_list":66,"icon":6,"id":86,"link":6,"name":87,"type":15},[67,71,74,77,80,83],{"id":68,"name":69,"alias":70,"type":15},160,"医疗","medical",{"id":72,"name":73,"alias":6,"type":15},1169,"银行",{"id":75,"name":76,"alias":6,"type":15},1170,"证券",{"id":78,"name":79,"alias":6,"type":15},1171,"保险",{"id":81,"name":82,"alias":6,"type":15},1172,"汽车",{"id":84,"name":85,"alias":6,"type":15},1173,"工业",1168,"行业深度",{"alias":89,"child_list":90,"icon":6,"id":117,"link":6,"name":118,"type":15},"AI&LLM",[91,95,99,102,105,108,111,114],{"id":92,"name":93,"alias":94,"type":15},125,"自动驾驶","Autopilot",{"id":96,"name":97,"alias":98,"type":15},127,"计算机视觉"," computing-vision",{"id":100,"name":101,"alias":6,"type":15},1183,"生成式 AI",{"id":103,"name":104,"alias":6,"type":15},1184,"AI 工程化",{"id":106,"name":107,"alias":6,"type":15},1185,"机器学习/深度学习",{"id":109,"name":110,"alias":6,"type":15},1186,"自然语言处理",{"id":112,"name":113,"alias":6,"type":15},1223,"具身智能",{"id":115,"name":116,"alias":6,"type":15},1187,"芯片&算力",31,"AI&大模型",{"alias":6,"child_list":120,"icon":6,"id":121,"link":6,"name":122,"type":15},null,1207,"出海",{"alias":6,"child_list":124,"icon":6,"id":149,"link":6,"name":150,"type":15},[125,129,133,137,140,143,146],{"id":126,"name":127,"alias":128,"type":15},29,"数据库","Database",{"id":130,"name":131,"alias":132,"type":15},32,"编程语言","programing-languages",{"id":134,"name":135,"alias":136,"type":15},81,"区块链","Blockchain",{"id":138,"name":139,"alias":6,"type":15},1175,"中间件",{"id":141,"name":142,"alias":6,"type":15},1176,"操作系统",{"id":144,"name":145,"alias":6,"type":15},1177,"5G/IoT",{"id":147,"name":148,"alias":6,"type":15},1178,"音视频(后端)",1174,"后端",{"alias":6,"child_list":152,"icon":6,"id":115,"link":6,"name":116,"type":15},[],{"alias":154,"child_list":155,"icon":6,"id":176,"link":6,"name":177,"type":15},"architecture",[156,160,164,167,170,173],{"id":157,"name":158,"alias":159,"type":15},12,"SOA","soa",{"id":161,"name":162,"alias":163,"type":15},70,"微服务","microservice",{"id":165,"name":166,"alias":6,"type":15},1179,"业务架构",{"id":168,"name":169,"alias":6,"type":15},1180,"框架",{"id":171,"name":172,"alias":6,"type":15},1181,"领域驱动设计",{"id":174,"name":175,"alias":6,"type":15},1182,"多云/混合云",8,"架构",{"alias":179,"child_list":180,"icon":6,"id":202,"link":6,"name":203,"type":15},"bigdata",[181,184,187,190,193,196,199],{"id":182,"name":183,"alias":6,"type":15},1188,"DataOps",{"id":185,"name":186,"alias":6,"type":15},1189,"数据集成",{"id":188,"name":189,"alias":6,"type":15},1190,"DataMesh",{"id":191,"name":192,"alias":6,"type":15},1191,"数据编织",{"id":194,"name":195,"alias":6,"type":15},1192,"数据湖仓",{"id":197,"name":198,"alias":6,"type":15},1193,"在离线混部",{"id":200,"name":201,"alias":6,"type":15},1194,"实时计算",15,"大数据",{"alias":6,"child_list":205,"icon":6,"id":228,"link":6,"name":229,"type":15},[206,210,213,216,219,222,225],{"id":207,"name":208,"alias":209,"type":15},21,"安全","Security",{"id":211,"name":212,"alias":212,"type":15},120,"AIOps",{"id":214,"name":215,"alias":215,"type":15},1165,"BizDevOps",{"id":217,"name":218,"alias":6,"type":15},1196,"DevOps & 平台工程",{"id":220,"name":221,"alias":6,"type":15},1197,"FinOps",{"id":223,"name":224,"alias":6,"type":15},1198,"研发效能",{"id":226,"name":227,"alias":6,"type":15},1199,"可观测",1195,"软件工程",{"alias":231,"child_list":232,"icon":6,"id":255,"link":6,"name":256,"type":15},"cloud-computing",[233,237,240,243,246,249,252],{"id":234,"name":235,"alias":236,"type":15},106,"云原生","CloudNative",{"id":238,"name":239,"alias":239,"type":15},119,"Serverless",{"id":241,"name":242,"alias":6,"type":15},1200,"服务革新",{"id":244,"name":245,"alias":6,"type":15},1201,"云安全",{"id":247,"name":248,"alias":6,"type":15},1202,"云端开发",{"id":250,"name":251,"alias":6,"type":15},1203,"芯片与网络",{"id":253,"name":254,"alias":6,"type":15},1216,"低代码",11,"云计算",{"alias":6,"child_list":258,"icon":6,"id":284,"link":6,"name":285,"type":15},[259,263,266,269,272,275,278,281],{"id":260,"name":261,"alias":262,"type":15},141,"小程序","applets",{"id":264,"name":265,"alias":265,"type":15},1144,"HarmonyOS",{"id":267,"name":268,"alias":6,"type":15},1209,"Android/iOS",{"id":270,"name":271,"alias":6,"type":15},1210,"架构/框架",{"id":273,"name":274,"alias":6,"type":15},1211,"工程化",{"id":276,"name":277,"alias":6,"type":15},1212,"跨端开发",{"id":279,"name":280,"alias":6,"type":15},1213,"性能优化",{"id":282,"name":283,"alias":6,"type":15},1214,"音视频(前端)",1208,"大前端",{"alias":6,"child_list":287,"icon":6,"id":305,"link":6,"name":306,"type":15},[288,292,296,299,302],{"id":289,"name":290,"alias":291,"type":15},17,"开源","opensource",{"id":293,"name":294,"alias":295,"type":15},1131,"技术选型","technology-selection",{"id":297,"name":298,"alias":6,"type":15},1160,"数字化转型",{"id":300,"name":301,"alias":6,"type":15},1205,"数字人才培养",{"id":303,"name":304,"alias":6,"type":15},1206,"团队搭建",1204,"管理/文化",{"child_list":308,"icon":6,"id":7,"link":309,"name":310,"type":311},[],"https://www.infoq.cn/content-center","企业服务案例",3,{"child_list":313,"icon":6,"id":7,"link":314,"name":315,"type":311},[],"https://time.geekbang.org","极客时间",{"child_list":317,"icon":6,"id":7,"link":318,"name":319,"type":311},[],"https://u.geekbang.org/?utm_source=infoq_web&utm_medium=menu&utm_term=infoqwebmenu","极客时间训练营",{"child_list":321,"icon":6,"id":7,"link":322,"name":323,"type":311},[],"https://b.geekbang.org/?utm_source=infoqweb&utm_medium=menu&gk_source=infoqwebmenu_2024092401","企业培训",{"child_list":325,"icon":6,"id":7,"link":326,"name":327,"type":311},[],"https://tgo.infoq.cn/","高端学员",{"child_list":329,"icon":330,"id":7,"link":331,"name":332,"type":311},[],"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下载",[334,352,371,380],{"list":335,"name":351},[336,339,342,345,348],{"name":337,"link":338,"image":6},"关于我们","https://www.infoq.cn/about",{"name":340,"link":341,"image":6},"我要投稿","https://www.infoq.cn/contribute",{"name":343,"link":344,"image":6},"合作伙伴","https://www.geekbang.org/partner",{"name":346,"link":347,"image":6},"加入我们","https://www.lagou.com/gongsi/j43775.html",{"name":349,"link":350,"image":6},"关注我们","https://infoq.cn/official/account","InfoQ",{"list":353,"name":370},[354,357,360,363,366,368],{"name":355,"link":356,"image":6},"内容投稿:editors@geekbang.com","mailto:editors@geekbang.com",{"name":358,"link":359,"image":6},"业务合作:hezuo@geekbang.com","mailto:hezuo@geekbang.com",{"name":361,"link":362,"image":6},"反馈投诉:feedback@geekbang.com","mailto:feedback@geekbang.com",{"name":364,"link":365,"image":6},"加入我们:zhaopin@geekbang.com","mailto:zhaopin@geekbang.com",{"name":367,"link":6,"image":6},"联系电话:010-64738142",{"name":369,"link":6,"image":6},"地址:北京市朝阳区望京北路9号2幢7层A701","联系我们",{"list":372,"name":379},[373,376],{"name":374,"link":375,"image":6},"北京 · QCon 全球软件开发大会 2026.4.16-18","https://qcon.infoq.cn/2026/beijing?utm_source=infoq&utm_medium=footer",{"name":377,"link":378,"image":6},"上海 · AICon 全球人工智能开发与应用大会 2026.6.26-27","https://aicon.infoq.cn/2026/shanghai?utm_source=infoq&utm_medium=footer","InfoQ 近期会议",{"list":381,"name":398},[382,386,390,394],{"name":383,"link":384,"image":385},"InfoQ En","https://www.infoq.com/","https://static001.infoq.cn/resource/image/55/38/55cd81623e36f5ab7a7db74d60b74838.png",{"name":387,"link":388,"image":389},"InfoQ Jp","https://www.infoq.com/jp/","https://static001.infoq.cn/resource/image/95/13/95fe851c02c86120e9037eada6a36d13.png",{"name":391,"link":392,"image":393},"InfoQ Fr","http://www.infoq.com/fr/","https://static001.infoq.cn/resource/image/2a/3e/2aa440b6d94e94f64c508f16da38933e.png",{"name":395,"link":396,"image":397},"InfoQ Br","http://www.infoq.com/br/","https://static001.infoq.cn/resource/image/4e/1e/4e737ce82bc7c8a1c2f2307bcea9a11e.png","全球 InfoQ",[400,407,414,421,428,434,441,447,454,460,467,473,479,485,492,498,505,511,518,523,529,535,541,547,553,559,565,571,576,583,589,596,602,608,614,620,626,632,638,643,649,656,662,668,673,679,684,688,693,699],{"end_time":401,"img":402,"link":403,"location":404,"name":405,"start_time":406},1782489599,"https://static001.infoq.cn/resource/image/98/de/9813c0294a3511b79b7b25c7e8a114de.png","https://www.infoq.cn","上海市科学之门A塔","Harness 时代的硅基团队治理",1782057600,{"end_time":408,"img":409,"link":410,"location":411,"name":412,"start_time":413},1781539199,"https://static001.infoq.cn/resource/image/28/a2/28d2590373caf8ebee178d85b59824a2.png","https://static001.geekbang.org/resource/image/42/c0/425ed7e119793500c9ff339ed54cd7c0.png","线上","GMI Cloud 品牌战略升级暨新品发布会",1781452800,{"end_time":415,"img":416,"link":417,"location":418,"name":419,"start_time":420},1782316799,"https://static001.infoq.cn/resource/image/0b/a2/0b2e45823eb36c01f5980e90c0442ea2.png","https://events.amazoncloud.cn/pages/summit-2026/zh.html?source=jyLXNovBYB51qgzUEipIpdb%2FlXQ1%2BauFJosOJWd8ZuMPxWmuRufNGrPBYuKMHDPy","上海•世博中心","亚马逊云科技中国峰会",1782144000,{"end_time":422,"img":423,"link":424,"location":425,"name":426,"start_time":427},1784995200,"https://static001.infoq.cn/resource/image/cc/30/cccf687a9892a5776a8c1b0d8ee5b730.jpg","https://adventure-x.org/","1","davx",1784563200,{"end_time":429,"img":430,"link":431,"location":411,"name":432,"start_time":433},1781020799,"https://static001.infoq.cn/resource/image/1f/4a/1f1d26df4d5598efaa1f1c57fc8a494a.jpeg","https://openlab.cosmoplat.com/skill-contest","AI技能挑战赛",1778256000,{"end_time":435,"img":436,"link":437,"location":438,"name":439,"start_time":440},1778688000,"https://static001.infoq.cn/resource/image/4e/e4/4ee8726a137ac24b4c4f168846f353e4.png","https://create2026.events.net.cn/#/","北京国家会议中心二期","Create2026百度AI开发者大会",1778601600,{"end_time":442,"img":443,"link":444,"location":411,"name":445,"start_time":446},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":448,"img":449,"link":450,"location":451,"name":452,"start_time":453},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":455,"img":456,"link":457,"location":411,"name":458,"start_time":459},1777564799,"https://static001.infoq.cn/resource/image/46/bd/46772038735yy4da5a4418f96b406cbd.jpg","https://maas.xfyun.cn/modelSquare?ch=maas-infoq-G9n8","讯飞星辰maas平台推广",1772985600,{"end_time":461,"img":462,"link":463,"location":464,"name":465,"start_time":466},1774627199,"https://static001.infoq.cn/resource/image/18/63/1898936d088123092b2ac0478bc72963.png","https://qdrl.qq.com/VDybhsBX","上海","2026腾讯云城市峰会•上海站",1774540800,{"end_time":468,"img":469,"link":470,"location":411,"name":471,"start_time":472},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":474,"img":475,"link":476,"location":411,"name":477,"start_time":478},1864569599,"https://static001.infoq.cn/resource/image/df/d7/df1a288f1e97e615ba35cae4a9127ed7.jpg","https://www.infoq.cn/space/snowflake","Snowflake 中文社区上线!",1766073600,{"end_time":480,"img":481,"link":482,"location":411,"name":483,"start_time":484},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":486,"img":487,"link":488,"location":489,"name":490,"start_time":491},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":493,"img":494,"link":495,"location":411,"name":496,"start_time":497},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":499,"img":500,"link":501,"location":502,"name":503,"start_time":504},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":506,"img":507,"link":508,"location":464,"name":509,"start_time":510},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":512,"img":513,"link":514,"location":515,"name":516,"start_time":517},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":519,"img":520,"link":482,"location":411,"name":521,"start_time":522},1763654399,"https://static001.infoq.cn/resource/image/15/ca/15b2f71676f5f3928ff5daeb21333dca.png","加入鸿蒙开发者阵营 开拓智能生态新蓝海!",1759248000,{"end_time":524,"img":525,"link":526,"location":411,"name":527,"start_time":528},1761840000,"https://static001.infoq.cn/resource/image/4f/41/4f7808d67c8e31b93d6fc1223716d241.jpg","https://www.infoq.cn/article/Xc1pH6JxKvgK7zFI8wFy","Snowflake 免费培训!欢迎参与!",1758988800,{"end_time":530,"img":531,"link":532,"location":411,"name":533,"start_time":534},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":536,"img":537,"link":538,"location":411,"name":539,"start_time":540},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":542,"img":543,"link":544,"location":411,"name":545,"start_time":546},1758038400,"https://static001.infoq.cn/resource/image/ba/2a/ba3fe8d0e31bdccf7c76f44f3157b12a.jpg","https://qdrl.qq.com/2lbhIc4r","2025腾讯全球数字生态大会",1757952000,{"end_time":548,"img":549,"link":550,"location":464,"name":551,"start_time":552},1753891199,"https://static001.infoq.cn/resource/image/d4/67/d4824160c0c26a3b04edf9dc0f2faa67.jpg","https://online2025.worldaic.com.cn/","WAIC",1753459200,{"end_time":554,"img":555,"link":556,"location":489,"name":557,"start_time":558},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":560,"img":561,"link":562,"location":411,"name":563,"start_time":564},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":566,"img":567,"link":568,"location":411,"name":569,"start_time":570},1753977599,"https://static001.infoq.cn/resource/image/a5/d3/a5518edc427e92079fcd7956daabbcd3.png","https://www.infoq.cn/zones/awscertification-june/","亚马逊培训认证6月",1748707200,{"end_time":566,"img":572,"link":573,"location":411,"name":574,"start_time":575},"https://static001.infoq.cn/resource/image/00/cb/0049b66c781ca3f5b8d5d4de60dde7cb.png","https://qr20.cn/EoJnXW","即刻成为鸿蒙应用开发者 携手共拓鸿蒙世界!",1749398400,{"end_time":577,"img":578,"link":579,"location":580,"name":581,"start_time":582},1749571199,"https://static001.infoq.cn/resource/image/4a/26/4aa6fc20bb1eyy67772eb4a09873e026.png","https://qdrl.qq.com/cljVFWT9","青岛","2025 腾讯云城市峰会",1749484800,{"end_time":584,"img":585,"link":586,"location":464,"name":587,"start_time":588},1750348800,"https://static001.infoq.cn/resource/image/cf/43/cfb7236133b4736ba0a11be8cfae3043.png","https://www.infoq.cn/event/?id=298","亚马逊云SUMMIT",1750262400,{"end_time":590,"img":591,"link":592,"location":593,"name":594,"start_time":595},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":597,"img":598,"link":599,"location":411,"name":600,"start_time":601},1745596799,"https://static001.infoq.cn/resource/image/61/57/6192fd75e85bee189d6cb7a3c34e9957.png","https://cloud.baidu.com/product-s/qianfan_home?track=44ca1a7f797708dfe98a81110b458fe0edf9d479e262c870","百度智能云干帆应用开发平台",1745510400,{"end_time":603,"img":604,"link":605,"location":464,"name":606,"start_time":607},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":609,"img":610,"link":611,"location":411,"name":612,"start_time":613},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":615,"img":616,"link":617,"location":489,"name":618,"start_time":619},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":621,"img":622,"link":623,"location":411,"name":624,"start_time":625},1749139199,"https://static001.infoq.cn/resource/image/8f/5a/8f42b5102d2a6bb01b1yy25de678c05a.jpg","https://www.infoq.cn/article/EiZAWhIT5U9YRPi893NR","开源合规精选培训课程",1745596800,{"end_time":627,"img":628,"link":629,"location":411,"name":630,"start_time":631},1747843199,"https://static001.infoq.cn/resource/image/f4/e7/f4ea438f30b686f709187b789e4a57e7.png","https://sourl.co/geWFmz","亚马逊AI认证4月",1742486400,{"end_time":633,"img":634,"link":635,"location":411,"name":636,"start_time":637},1741881600,"https://static001.infoq.cn/resource/image/b3/d6/b3a02c6ea0269f79af48167yy01eced6.png","https://www.infoq.cn/event/?id=294","为突破而构建数据燃动AI",1739980800,{"end_time":639,"img":640,"link":482,"location":411,"name":641,"start_time":642},1738252800,"https://static001.infoq.cn/resource/image/0b/5a/0b27a8d162d93b7c6ea3e08b60e9f65a.png","即刻加入,成为harmony OS应用开发者",1735056000,{"end_time":644,"img":645,"link":646,"location":489,"name":647,"start_time":648},1734105599,"https://static001.infoq.cn/resource/image/3a/24/3a84c8b7aa904bf46177ff84e8c6cb24.jpg","https://www.infoq.cn/event/?id=293","Al for Data 与大模型训练加速实践 专场",1734019200,{"end_time":650,"img":651,"link":652,"location":653,"name":654,"start_time":655},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":657,"img":658,"link":659,"location":411,"name":660,"start_time":661},1734710399,"https://static001.infoq.cn/resource/image/22/dc/2211300cc2d2acfda040922ef5a6a1dc.png","https://www.infoq.cn/article/otlWQdLRB7ci1K1TPdbZ","字节跳动开源云原生数据仓库ByConity众测",1732636800,{"end_time":663,"img":664,"link":665,"location":464,"name":666,"start_time":667},1733587199,"https://static001.infoq.cn/resource/image/3f/a9/3f7cd8a638c24412fe295d810ae218a9.jpeg","https://www.huodongxing.com/event/6783033754700?qd=OpenTiny","2024华为云开源开发者论坛",1733500800,{"end_time":663,"img":669,"link":670,"location":411,"name":671,"start_time":672},"https://static001.infoq.cn/resource/image/f9/74/f93dd0b1242137659f8e5dd00decdb74.png","https://dev.amazoncloud.cn/competition/detail/genaicompetition?visitfrom=InfoQ1","第三届中国生成式 AI 应用创新挑战赛推广",1732204800,{"end_time":674,"img":675,"link":676,"location":411,"name":677,"start_time":678},1732982399,"https://static001.infoq.cn/resource/image/7e/0d/7e1428b18yy9b081542b4ef08a00ce0d.png","https://jsj.top/f/xU2Gmv","Amazon Q Developer 体验调研",1731513600,{"end_time":680,"img":681,"link":682,"location":411,"name":683,"start_time":678},1734019199,"https://static001.infoq.cn/resource/image/ff/c3/ff1287bf2a34793531813bb811896ac3.png","https://dev.amazoncloud.cn/associate-retake?visitfrom=infoq1","亚马逊云科技助理级认证活动",{"end_time":674,"img":685,"link":686,"location":411,"name":687,"start_time":678},"https://static001.infoq.cn/resource/image/3f/94/3f72e2c02d4a203980f89f3f6e813694.png","https://dev.amazoncloud.cn/learn/aitalent/obtainCertificate?visitfrom=infoQ1","亚马逊云科技AI从业者认证",{"end_time":674,"img":689,"link":690,"location":411,"name":691,"start_time":692},"https://static001.infoq.cn/resource/image/38/9c/38f2a6d31f52ef17781678c0a82dde9c.png","https://cloud.baidu.com/campaign/qianfan/index.html?track=98df3bcb86b429860e9c9fdca4fd2edc50b7882e882c090f","千帆大模型平台特惠专场",1731427200,{"end_time":694,"img":695,"link":696,"location":464,"name":697,"start_time":698},1731427199,"https://static001.infoq.cn/resource/image/81/b4/81e10cbdc5636f5ca57fae44f044b1b4.png","https://baiduworld.baidu.com","百度世界大会",1731340800,{"end_time":700,"img":701,"link":702,"location":411,"name":703,"start_time":704},1732463999,"https://static001.infoq.cn/resource/image/d1/a0/d16ecacda10d8614fa0a2928f04f0da0.png","https://mp.weixin.qq.com/s/LmG1_1NTkvigdewqE-LQwA","蚂蚁 agentUniverse 征文活动",1729699200,[706,709,712,715,718,721,723,725,728,731,734],{"icon":6,"link":707,"name":708},"https://www.infoq.cn/","首页",{"icon":330,"link":710,"name":711},"https://www.infoq.cn/archives","AI会议",{"icon":330,"link":713,"name":714},"https://time.geekbang.org/resource?pt=1","AI课程",{"icon":330,"link":716,"name":717},"https://agicamp.com/ranking-list/?utm_source=infoqbar","AI应用",{"icon":6,"link":719,"name":720},"https://www.infoq.cn/zones/chinatechawards2025/","AI榜单",{"icon":6,"link":722,"name":265},"https://www.infoq.cn/zones/harmonyos/",{"icon":330,"link":538,"name":724},"AI大赛",{"icon":6,"link":726,"name":727},"https://www.infoq.cn/minibook","报告",{"icon":6,"link":729,"name":730},"https://www.infoq.cn/video","视频",{"icon":6,"link":732,"name":733},"https://zhinan.geekbang.com/?utm_source=geektimeweb&utm_medium=menu&gk_source=20241016_geektimeweb_menu","AI指南",{"icon":6,"link":735,"name":736},"https://www.infoq.cn/research","研究中心",[738,743,750,755,762,768,774,781,786,807,840,845,850],{"id":739,"pid":7,"name":740,"url":707,"icon":6,"corner_mark":741,"sort":15,"children":742},1038,{"type":15,"text":708,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},[],{"id":744,"pid":7,"name":745,"url":710,"icon":6,"corner_mark":746,"sort":747,"children":749},1039,{"type":15,"text":711,"icon":6,"alt":6},{"type":747,"text":748,"icon":6},2,"hot",[],{"id":751,"pid":7,"name":752,"url":713,"icon":6,"corner_mark":753,"sort":311,"children":754},1040,{"type":15,"text":714,"icon":6,"alt":6},{"type":747,"text":748,"icon":6},[],{"id":756,"pid":7,"name":757,"url":758,"icon":6,"corner_mark":759,"sort":760,"children":761},1041,{"type":15,"text":717,"icon":6,"alt":6},"https://agicamp.com/?utm_source=infoqbar",{"type":747,"text":748,"icon":6},4,[],{"id":763,"pid":7,"name":764,"url":726,"icon":6,"corner_mark":765,"sort":766,"children":767},1045,{"type":15,"text":727,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},5,[],{"id":769,"pid":7,"name":770,"url":722,"icon":6,"corner_mark":771,"sort":772,"children":773},1043,{"type":15,"text":265,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},6,[],{"id":775,"pid":7,"name":776,"url":476,"icon":6,"corner_mark":777,"sort":779,"children":780},1053,{"type":15,"text":62,"icon":6,"alt":6},{"type":747,"text":778,"icon":6},"new",7,[],{"id":782,"pid":7,"name":783,"url":729,"icon":6,"corner_mark":784,"sort":176,"children":785},1046,{"type":15,"text":730,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},[],{"id":787,"pid":7,"name":788,"url":6,"icon":6,"corner_mark":790,"sort":791,"children":792},1056,{"type":15,"text":789,"icon":6,"alt":6},"企业专区",{"type":747,"text":778,"icon":6},9,[793,800],{"id":794,"pid":787,"name":795,"url":797,"icon":6,"corner_mark":798,"sort":15,"children":799},1062,{"type":15,"text":796,"icon":6,"alt":6},"arm专区","https://www.infoq.cn/zones/arm/",{"type":747,"text":778,"icon":6},[],{"id":801,"pid":787,"name":802,"url":804,"icon":6,"corner_mark":805,"sort":747,"children":806},1057,{"type":15,"text":803,"icon":6,"alt":6},"intel 专区","https://www.infoq.cn/zones/intel2025/",{"type":7,"text":6,"icon":6},[],{"id":808,"pid":7,"name":809,"url":538,"icon":6,"corner_mark":810,"sort":811,"children":812},1044,{"type":15,"text":724,"icon":6,"alt":6},{"type":747,"text":748,"icon":6},10,[813,819,826,833],{"id":814,"pid":808,"name":815,"url":538,"icon":6,"corner_mark":817,"sort":15,"children":818},1049,{"type":15,"text":816,"icon":6,"alt":6},"微众银行 · 深圳国际金融科技大赛",{"type":7,"text":6,"icon":6},[],{"id":820,"pid":808,"name":821,"url":823,"icon":6,"corner_mark":824,"sort":747,"children":825},1050,{"type":15,"text":822,"icon":6,"alt":6},"亚马逊云科技 · 1000 AIdea 应用计划","https://www.infoq.cn/zones/1000aidea/#schedule",{"type":7,"text":6,"icon":6},[],{"id":827,"pid":808,"name":828,"url":830,"icon":6,"corner_mark":831,"sort":311,"children":832},1051,{"type":15,"text":829,"icon":6,"alt":6},"微软 · AI 开发者挑战赛","https://www.infoq.cn/zones/microsoftai/",{"type":7,"text":6,"icon":6},[],{"id":834,"pid":808,"name":835,"url":837,"icon":6,"corner_mark":838,"sort":760,"children":839},1052,{"type":15,"text":836,"icon":6,"alt":6},"InfoQ · 大模型技术应用创新大赛","https://www.infoq.cn/zones/geekathon2023",{"type":7,"text":6,"icon":6},[],{"id":841,"pid":7,"name":842,"url":735,"icon":6,"corner_mark":843,"sort":255,"children":844},1048,{"type":15,"text":736,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},[],{"id":846,"pid":7,"name":847,"url":719,"icon":6,"corner_mark":848,"sort":157,"children":849},1042,{"type":15,"text":720,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},[],{"id":851,"pid":7,"name":852,"url":732,"icon":6,"corner_mark":854,"sort":855,"children":856},1047,{"type":15,"text":853,"icon":6,"alt":6},"AI工具",{"type":7,"text":6,"icon":6},13,[857,865,873,881],{"id":858,"pid":851,"name":859,"url":861,"icon":6,"corner_mark":862,"sort":863,"children":864},1065,{"type":15,"text":860,"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":866,"pid":851,"name":867,"url":869,"icon":6,"corner_mark":870,"sort":871,"children":872},1066,{"type":15,"text":868,"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":874,"pid":851,"name":875,"url":877,"icon":6,"corner_mark":878,"sort":879,"children":880},1067,{"type":15,"text":876,"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":882,"pid":851,"name":883,"url":885,"icon":6,"corner_mark":886,"sort":887,"children":888},1068,{"type":15,"text":884,"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,[],{"authorData":890,"id":898,"aid":899,"aidint":900,"type":15,"views":901,"uuid":902,"status":15,"publish_time":903,"ctime":904,"utime":904,"vid":6,"source":15,"sub_status":7,"ip_address":6,"score":903,"article_title":905,"article_sharetitle":905,"article_subtitle":6,"article_summary":906,"article_cover":907,"article_cover_point":908,"author":897,"translator":909,"planner":915,"topic":921,"is_collect":938,"no_author":6,"is_promotion":938,"share_pic":6,"sub_type":7,"comment_user":7,"comment_count":15,"speaker_title":6,"speaker_introduce":6,"video_status":7,"duration":6,"total_duration":6,"label":939,"out_id":120,"word_count":940,"front_type":15,"content_short":6,"is_fill_info":7,"show_subtitle":6,"content":941,"ebook":1942,"love":15,"is_love":938,"copyright":15,"lead_author":7,"ppt_url":6,"publisher":1943,"definition":120,"read_status":7,"collect":747,"checker":120,"outlines":120,"content_url":1944,"themes":1945,"audio_status":7,"audio_url":6,"audio_size":7,"ebook_type":7,"video":1946,"form_id":7,"topicIdsMustBeSelected":1947,"topicNamesMustBeSelected":1948,"themeIds":1949,"themeNames":1950},{"uid":891,"nickname":892,"avatar":6,"active":15,"is_early":7,"ucode":893,"uri":894,"author_type":7,"vip":7,"authorLabel":895,"isAuthor":896,"list":897},3009494,"Yong Cui","0CE5A563E9CE0A","/profile/0CE5A563E9CE0A/","作者",true,[890],160494,"161044",161044,20601,"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}",[910],{"uid":911,"nickname":912,"avatar":6,"active":15,"is_early":7,"ucode":913,"uri":914,"author_type":7,"vip":7},1368875,"平川","4D6E74F678F49C","/profile/4D6E74F678F49C/",[916],{"uid":917,"nickname":918,"avatar":6,"active":15,"is_early":7,"ucode":919,"uri":920,"author_type":7,"vip":7},1439149,"邓艳琴","D459E9DD515679","/profile/D459E9DD515679/",[922,923,926,927,930,934,937],{"id":284,"name":285,"alias":6,"type":747},{"id":15,"name":924,"alias":925,"type":15},"语言 & 开发","development",{"id":130,"name":131,"alias":132,"type":15},{"id":928,"name":929,"alias":929,"type":15},1121,"GMTC",{"id":931,"name":932,"alias":933,"type":747},50,"Python","python",{"id":935,"name":936,"alias":6,"type":747},1151,"Web",{"id":168,"name":169,"alias":6,"type":747},false,[],2422,{"type":942,"content":943},"doc",[944,954,965,986,993,1008,1015,1023,1032,1089,1096,1116,1118,1129,1131,1137,1147,1154,1162,1256,1263,1271,1273,1279,1281,1287,1297,1304,1312,1320,1351,1358,1366,1368,1374,1376,1382,1392,1399,1430,1437,1443,1486,1494,1525,1527,1533,1535,1541,1551,1558,1566,1657,1664,1690,1692,1698,1700,1706,1716,1723,1742,1750,1752,1760,1767,1787,1789,1795,1797,1803,1813,1820,1850,1858,1860,1868,1875,1883,1890,1898,1905,1913,1915,1926,1928],{"type":945,"content":946},"blockquote",[947],{"type":948,"attrs":949,"content":950},"paragraph",{"indent":7,"number":7,"align":120,"origin":120},[951],{"type":952,"text":953},"text","这是下一个大事件吗?如果继续发展下去,有可能。",{"type":948,"attrs":955,"content":956},{"indent":7,"number":7,"align":120,"origin":120},[957],{"type":952,"marks":958,"text":964},[959],{"type":960,"attrs":961},"color",{"color":962,"name":963},"#494949","user"," ",{"type":948,"attrs":966,"content":967},{"indent":7,"number":7,"align":120,"origin":120},[968,973,981],{"type":952,"marks":969,"text":972},[970],{"type":960,"attrs":971},{"color":962,"name":963},"在 2022年PyCon 美国大会期间,作为主题演讲嘉宾之一的 Peter Wang 公布了 ",{"type":974,"attrs":975,"content":978},"link",{"href":976,"title":977,"type":120},"https://github.com/pyscript/pyscript","xxx",[979],{"type":952,"text":980},"PyScript",{"type":952,"marks":982,"text":985},[983],{"type":960,"attrs":984},{"color":962,"name":963},",一种在 HTML 中直接编写 Python 脚本的方法。或许你不知道 Peter,但你可能听说过 Anaconda,这是一种流行的开源的 Python 和 R 语言的发行版本,特别关注数据科学。Peter 正是 Anaconda 的 CEO 和联合创始人。",{"type":948,"attrs":987,"content":988},{"indent":7,"number":7,"align":120,"origin":120},[989],{"type":952,"marks":990,"text":964},[991],{"type":960,"attrs":992},{"color":962,"name":963},{"type":948,"attrs":994,"content":995},{"indent":7,"number":7,"align":120,"origin":120},[996,1001,1003],{"type":952,"marks":997,"text":1000},[998],{"type":960,"attrs":999},{"color":962,"name":963},"换言之,PyScript 是由一家著名的科技公司开发的,这可能会保证它在不久的将来成为可行的方案。它在 Python 和 Web 开发者中受到了极大的关注,",{"type":952,"text":1002},"GitHub",{"type":952,"marks":1004,"text":1007},[1005],{"type":960,"attrs":1006},{"color":962,"name":963}," 上已有超过 10k 颗 Stars。然而,它是否能成为一个成功的、有竞争力的产品,取决于长期的时间和开发投入。目前,它还有一些已知的缺陷(将在最后讨论)。",{"type":948,"attrs":1009,"content":1010},{"indent":7,"number":7,"align":120,"origin":120},[1011],{"type":952,"marks":1012,"text":964},[1013],{"type":960,"attrs":1014},{"color":962,"name":963},{"type":948,"attrs":1016,"content":1017},{"indent":7,"number":7,"align":120,"origin":120},[1018],{"type":952,"marks":1019,"text":1022},[1020],{"type":960,"attrs":1021},{"color":962,"name":963},"闲话少说,让我们快速了解一下这个令人振奋的产品吧!",{"type":1024,"attrs":1025,"content":1026},"heading",{"align":120,"level":15},[1027],{"type":952,"marks":1028,"text":1031},[1029],{"type":960,"attrs":1030},{"color":962,"name":963},"py-script标签",{"type":948,"attrs":1033,"content":1034},{"indent":7,"number":7,"align":120,"origin":120},[1035,1040,1048,1053,1060,1065,1072,1077,1084],{"type":952,"marks":1036,"text":1039},[1037],{"type":960,"attrs":1038},{"color":962,"name":963},"我们知道,HTML 文件是大多数网站最常见的元素。在创建网站时,我们的工作就是直接或间接地通过一些框架来编制 HTML 文件。在典型的 HTML 文件中,你会看到各种类型的标签。例如,",{"type":1041,"content":1042,"marks":1045},"codeinline",[1043],{"type":952,"text":1044},"\u003Chead>",[1046],{"type":960,"attrs":1047},{"color":962,"name":963},{"type":952,"marks":1049,"text":1052},[1050],{"type":960,"attrs":1051},{"color":962,"name":963},"定义了HTML页面的元数据和关键信息,",{"type":1041,"content":1054,"marks":1057},[1055],{"type":952,"text":1056},"\u003Ctitle>",[1058],{"type":960,"attrs":1059},{"color":962,"name":963},{"type":952,"marks":1061,"text":1064},[1062],{"type":960,"attrs":1063},{"color":962,"name":963},"是整个文档的标题,而",{"type":1041,"content":1066,"marks":1069},[1067],{"type":952,"text":1068},"\u003Ch1>",[1070],{"type":960,"attrs":1071},{"color":962,"name":963},{"type":952,"marks":1073,"text":1076},[1074],{"type":960,"attrs":1075},{"color":962,"name":963},"、",{"type":1041,"content":1078,"marks":1081},[1079],{"type":952,"text":1080},"\u003Ch2>",[1082],{"type":960,"attrs":1083},{"color":962,"name":963},{"type":952,"marks":1085,"text":1088},[1086],{"type":960,"attrs":1087},{"color":962,"name":963},"等定义了不同级别的内容标题。",{"type":948,"attrs":1090,"content":1091},{"indent":7,"number":7,"align":120,"origin":120},[1092],{"type":952,"marks":1093,"text":964},[1094],{"type":960,"attrs":1095},{"color":962,"name":963},{"type":948,"attrs":1097,"content":1098},{"indent":7,"number":7,"align":120,"origin":120},[1099,1104,1111],{"type":952,"marks":1100,"text":1103},[1101],{"type":960,"attrs":1102},{"color":962,"name":963},"如前所述,PyScript 允许你在 HTML 中编写Python脚本,它使用一个特殊的标签",{"type":1041,"content":1105,"marks":1108},[1106],{"type":952,"text":1107},"py-script",[1109],{"type":960,"attrs":1110},{"color":962,"name":963},{"type":952,"marks":1112,"text":1115},[1113],{"type":960,"attrs":1114},{"color":962,"name":963},"。在这个标签中,你可以嵌入 Python 脚本。要了解它是如何工作的,可以创建一个 HTML 文件,其中包含以下代码,并使用 Chrome 浏览器打开该文件。在 Chrome 浏览器中,你应该能够看到类似下面这样的内容:",{"type":948,"attrs":1117},{"indent":7,"number":7,"align":120,"origin":120},{"type":1119,"attrs":1120},"image",{"src":1121,"alt":120,"title":120,"style":1122,"href":120,"fromPaste":896,"pastePass":896},"https://static001.geekbang.org/infoq/b7/b7cf3649eb920dfd76b246074c54a8f0.png",[1123,1126],{"key":1124,"value":1125},"width","75%",{"key":1127,"value":1128},"bordertype","none",{"type":948,"attrs":1130},{"indent":7,"number":7,"align":120,"origin":120},{"type":1119,"attrs":1132},{"src":1133,"alt":120,"title":120,"style":1134,"href":120,"fromPaste":896,"pastePass":896},"https://static001.geekbang.org/infoq/d1/d1c8a6e49c89d1695ab45b26f726d77e.png",[1135,1136],{"key":1124,"value":1125},{"key":1127,"value":1128},{"type":948,"attrs":1138,"content":1140},{"indent":7,"number":7,"align":1139,"origin":120},"center",[1141],{"type":952,"marks":1142,"text":1146},[1143],{"type":1144,"attrs":1145},"size",{"size":791},"作者截图",{"type":948,"attrs":1148,"content":1149},{"indent":7,"number":7,"align":120,"origin":120},[1150],{"type":952,"marks":1151,"text":964},[1152],{"type":960,"attrs":1153},{"color":962,"name":963},{"type":948,"attrs":1155,"content":1156},{"indent":7,"number":7,"align":120,"origin":120},[1157],{"type":952,"marks":1158,"text":1161},[1159],{"type":960,"attrs":1160},{"color":962,"name":963},"在上面的代码片段中,你可能已经注意到以下三个关键点:",{"type":1163,"content":1164},"bulletedlist",[1165,1190,1228],{"type":1166,"attrs":1167,"content":1168},"listitem",{"listStyle":120},[1169],{"type":948,"attrs":1170,"content":1171},{"indent":7,"number":7,"align":120,"origin":120},[1172,1179,1181,1188],{"type":1041,"content":1173,"marks":1175},[1174],{"type":952,"text":974},[1176],{"type":960,"attrs":1177},{"color":1178,"name":963},"#292929",{"type":952,"text":1180},"标签定义了一个外部样式表。在这个例子中,我们使用了 PyScript 提供的",{"type":1041,"content":1182,"marks":1185},[1183],{"type":952,"text":1184},"css",[1186],{"type":960,"attrs":1187},{"color":1178,"name":963},{"type":952,"text":1189},"文件。",{"type":1166,"attrs":1191,"content":1192},{"listStyle":120},[1193],{"type":948,"attrs":1194,"content":1195},{"indent":7,"number":7,"align":120,"origin":120},[1196,1201,1208,1210,1217,1219,1226],{"type":952,"marks":1197,"text":1200},[1198],{"type":960,"attrs":1199},{"color":962,"name":963},"我们使用",{"type":1041,"content":1202,"marks":1205},[1203],{"type":952,"text":1204},"script",[1206],{"type":960,"attrs":1207},{"color":1178,"name":963},{"type":952,"text":1209},"标签来嵌入一个由",{"type":1041,"content":1211,"marks":1214},[1212],{"type":952,"text":1213},"src",[1215],{"type":960,"attrs":1216},{"color":1178,"name":963},{"type":952,"text":1218},"定义、由 PyScript 托管的外部脚本。我们使用了",{"type":1041,"content":1220,"marks":1223},[1221],{"type":952,"text":1222},"defer",[1224],{"type":960,"attrs":1225},{"color":1178,"name":963},{"type":952,"text":1227},",这样脚本会在下载和页面解析完成后执行——本质上是一种延迟执行,而不是实时执行。",{"type":1166,"attrs":1229,"content":1230},{"listStyle":120},[1231],{"type":948,"attrs":1232,"content":1233},{"indent":7,"number":7,"align":120,"origin":120},[1234,1239,1245,1247,1254],{"type":952,"marks":1235,"text":1238},[1236],{"type":960,"attrs":1237},{"color":962,"name":963},"最有趣的部分是",{"type":1041,"content":1240,"marks":1242},[1241],{"type":952,"text":1107},[1243],{"type":960,"attrs":1244},{"color":1178,"name":963},{"type":952,"text":1246},"标签。如你所见,",{"type":1041,"content":1248,"marks":1251},[1249],{"type":952,"text":1250},"print(\"Hello, World!\")",[1252],{"type":960,"attrs":1253},{"color":1178,"name":963},{"type":952,"text":1255},"是 Python 代码。当执行 HTML 文件时,就可以看到代码求值结果。",{"type":948,"attrs":1257,"content":1258},{"indent":7,"number":7,"align":120,"origin":120},[1259],{"type":952,"marks":1260,"text":964},[1261],{"type":960,"attrs":1262},{"color":962,"name":963},{"type":948,"attrs":1264,"content":1265},{"indent":7,"number":7,"align":120,"origin":120},[1266],{"type":952,"marks":1267,"text":1270},[1268],{"type":960,"attrs":1269},{"color":962,"name":963},"这很酷,不是吗?如果你不熟悉 Web 开发,但了解 Python,就可以使用 PyScript 嵌入任何有效的 Python 代码。让我们再看一个例子。",{"type":948,"attrs":1272},{"indent":7,"number":7,"align":120,"origin":120},{"type":1119,"attrs":1274},{"src":1275,"alt":120,"title":120,"style":1276,"href":120,"fromPaste":896,"pastePass":896},"https://static001.geekbang.org/infoq/80/80c04d7afe33fd0f4d34f391847a8e75.png",[1277,1278],{"key":1124,"value":1125},{"key":1127,"value":1128},{"type":948,"attrs":1280},{"indent":7,"number":7,"align":120,"origin":120},{"type":1119,"attrs":1282},{"src":1283,"alt":120,"title":120,"style":1284,"href":120,"fromPaste":896,"pastePass":896},"https://static001.geekbang.org/infoq/ff/ff83f9e4bfead1f156366ce957063170.png",[1285,1286],{"key":1124,"value":1125},{"key":1127,"value":1128},{"type":948,"attrs":1288,"content":1289},{"indent":7,"number":7,"align":1139,"origin":120},[1290],{"type":952,"marks":1291,"text":1296},[1292,1294],{"type":1144,"attrs":1293},{"size":791},{"type":960,"attrs":1295},{"color":962,"name":963},"另一个PyScript示例(图片由作者提供)",{"type":948,"attrs":1298,"content":1299},{"indent":7,"number":7,"align":120,"origin":120},[1300],{"type":952,"marks":1301,"text":964},[1302],{"type":960,"attrs":1303},{"color":962,"name":963},{"type":948,"attrs":1305,"content":1306},{"indent":7,"number":7,"align":120,"origin":120},[1307],{"type":952,"marks":1308,"text":1311},[1309],{"type":960,"attrs":1310},{"color":962,"name":963},"在这里,我们写了一些需要计算的代码,可以看到,脚本得到了正确的执行。",{"type":1024,"attrs":1313,"content":1314},{"align":120,"level":15},[1315],{"type":952,"marks":1316,"text":1319},[1317],{"type":960,"attrs":1318},{"color":962,"name":963},"py-env标签",{"type":948,"attrs":1321,"content":1322},{"indent":7,"number":7,"align":120,"origin":120},[1323,1328,1335,1340,1346],{"type":952,"marks":1324,"text":1327},[1325],{"type":960,"attrs":1326},{"color":962,"name":963},"在编写更复杂的代码时,就需要使用第三方库。在这种情况下,我们可以利用",{"type":1041,"content":1329,"marks":1332},[1330],{"type":952,"text":1331},"py-env",[1333],{"type":960,"attrs":1334},{"color":962,"name":963},{"type":952,"marks":1336,"text":1339},[1337],{"type":960,"attrs":1338},{"color":962,"name":963},"标签。你可能已经猜到的,env 是 environment 的缩写。",{"type":1041,"content":1341,"marks":1343},[1342],{"type":952,"text":1331},[1344],{"type":960,"attrs":1345},{"color":962,"name":963},{"type":952,"marks":1347,"text":1350},[1348],{"type":960,"attrs":1349},{"color":962,"name":963},"标签中列出了运行代码所需的 Python 包。",{"type":948,"attrs":1352,"content":1353},{"indent":7,"number":7,"align":120,"origin":120},[1354],{"type":952,"marks":1355,"text":964},[1356],{"type":960,"attrs":1357},{"color":962,"name":963},{"type":948,"attrs":1359,"content":1360},{"indent":7,"number":7,"align":120,"origin":120},[1361],{"type":952,"marks":1362,"text":1365},[1363],{"type":960,"attrs":1364},{"color":962,"name":963},"你可能知道,许多数据科学家都使用 pandas 进行数据处理工作。让我们看看下面的例子。",{"type":948,"attrs":1367},{"indent":7,"number":7,"align":120,"origin":120},{"type":1119,"attrs":1369},{"src":1370,"alt":120,"title":120,"style":1371,"href":120,"fromPaste":896,"pastePass":896},"https://static001.geekbang.org/infoq/81/81a2e07ff71a317924c7664120862b6e.png",[1372,1373],{"key":1124,"value":1125},{"key":1127,"value":1128},{"type":948,"attrs":1375},{"indent":7,"number":7,"align":120,"origin":120},{"type":1119,"attrs":1377},{"src":1378,"alt":120,"title":120,"style":1379,"href":120,"fromPaste":896,"pastePass":896},"https://static001.geekbang.org/infoq/df/df79380011e061d1030cfe721b89989b.png",[1380,1381],{"key":1124,"value":1125},{"key":1127,"value":1128},{"type":948,"attrs":1383,"content":1384},{"indent":7,"number":7,"align":1139,"origin":120},[1385],{"type":952,"marks":1386,"text":1391},[1387,1389],{"type":1144,"attrs":1388},{"size":791},{"type":960,"attrs":1390},{"color":962,"name":963},"使用包的PyScript(图片由作者提供)",{"type":948,"attrs":1393,"content":1394},{"indent":7,"number":7,"align":120,"origin":120},[1395],{"type":952,"marks":1396,"text":964},[1397],{"type":960,"attrs":1398},{"color":962,"name":963},{"type":948,"attrs":1400,"content":1401},{"indent":7,"number":7,"align":120,"origin":120},[1402,1407,1413,1418,1425],{"type":952,"marks":1403,"text":1406},[1404],{"type":960,"attrs":1405},{"color":962,"name":963},"如你所见,我们在",{"type":1041,"content":1408,"marks":1410},[1409],{"type":952,"text":1331},[1411],{"type":960,"attrs":1412},{"color":962,"name":963},{"type":952,"marks":1414,"text":1417},[1415],{"type":960,"attrs":1416},{"color":962,"name":963},"标签中指定了依赖项(即 Pandas),该标签包含在",{"type":1041,"content":1419,"marks":1422},[1420],{"type":952,"text":1421},"head",[1423],{"type":960,"attrs":1424},{"color":962,"name":963},{"type":952,"marks":1426,"text":1429},[1427],{"type":960,"attrs":1428},{"color":962,"name":963},"标签中。如果页面需要多个依赖项,可以在这里把它们全部列出:",{"type":948,"attrs":1431,"content":1432},{"indent":7,"number":7,"align":120,"origin":120},[1433],{"type":952,"marks":1434,"text":964},[1435],{"type":960,"attrs":1436},{"color":962,"name":963},{"type":1438,"attrs":1439,"content":1440},"codeblock",{"lang":120},[1441],{"type":952,"text":1442},"\u003Cpy-env>\n - pandas\n - matplotlib\n - numpy\n\u003C/py-env>",{"type":948,"attrs":1444,"content":1445},{"indent":7,"number":7,"align":120,"origin":120},[1446,1451,1457,1462,1469,1474,1481],{"type":952,"marks":1447,"text":1450},[1448],{"type":960,"attrs":1449},{"color":962,"name":963},"如你所见,在",{"type":1041,"content":1452,"marks":1454},[1453],{"type":952,"text":1107},[1455],{"type":960,"attrs":1456},{"color":962,"name":963},{"type":952,"marks":1458,"text":1461},[1459],{"type":960,"attrs":1460},{"color":962,"name":963},"标签中,我们确实可以使用 Pandas 库来创建一个",{"type":1041,"content":1463,"marks":1466},[1464],{"type":952,"text":1465},"DataFrame",[1467],{"type":960,"attrs":1468},{"color":962,"name":963},{"type":952,"marks":1470,"text":1473},[1471],{"type":960,"attrs":1472},{"color":962,"name":963},"对象。然而,当我们把打印出来时就会发现,它是一个单行,而不是一个结构化的数据表。没有一个适当的结构,我们就无法理解这些数据。幸运的是,我们可以使用",{"type":1041,"content":1475,"marks":1478},[1476],{"type":952,"text":1477},"write",[1479],{"type":960,"attrs":1480},{"color":962,"name":963},{"type":952,"marks":1482,"text":1485},[1483],{"type":960,"attrs":1484},{"color":962,"name":963},"函数(下文会讨论)。",{"type":1024,"attrs":1487,"content":1488},{"align":120,"level":15},[1489],{"type":952,"marks":1490,"text":1493},[1491],{"type":960,"attrs":1492},{"color":962,"name":963},"将内容写入指定标签",{"type":948,"attrs":1495,"content":1496},{"indent":7,"number":7,"align":120,"origin":120},[1497,1502,1509,1514,1520],{"type":952,"marks":1498,"text":1501},[1499],{"type":960,"attrs":1500},{"color":962,"name":963},"除了Python中的标准打印函数",{"type":1041,"content":1503,"marks":1506},[1504],{"type":952,"text":1505},"print",[1507],{"type":960,"attrs":1508},{"color":962,"name":963},{"type":952,"marks":1510,"text":1513},[1511],{"type":960,"attrs":1512},{"color":962,"name":963},",作为脚本的一部分,PyScript有自己的",{"type":1041,"content":1515,"marks":1517},[1516],{"type":952,"text":1477},[1518],{"type":960,"attrs":1519},{"color":962,"name":963},{"type":952,"marks":1521,"text":1524},[1522],{"type":960,"attrs":1523},{"color":962,"name":963},"函数,可以将数据发送到页面上指定的Web元素中。请看下面的例子:",{"type":948,"attrs":1526},{"indent":7,"number":7,"align":120,"origin":120},{"type":1119,"attrs":1528},{"src":1529,"alt":120,"title":120,"style":1530,"href":120,"fromPaste":896,"pastePass":896},"https://static001.geekbang.org/infoq/54/548175e28244c2b86e5b35db19bdf9ff.png",[1531,1532],{"key":1124,"value":1125},{"key":1127,"value":1128},{"type":948,"attrs":1534},{"indent":7,"number":7,"align":120,"origin":120},{"type":1119,"attrs":1536},{"src":1537,"alt":120,"title":120,"style":1538,"href":120,"fromPaste":896,"pastePass":896},"https://static001.geekbang.org/infoq/f6/f612d73015a7a21224b20561347bf3b2.png",[1539,1540],{"key":1124,"value":1125},{"key":1127,"value":1128},{"type":948,"attrs":1542,"content":1543},{"indent":7,"number":7,"align":1139,"origin":120},[1544],{"type":952,"marks":1545,"text":1550},[1546,1548],{"type":1144,"attrs":1547},{"size":791},{"type":960,"attrs":1549},{"color":962,"name":963},"PyScript 写函数 write(图片由作者提供)",{"type":948,"attrs":1552,"content":1553},{"indent":7,"number":7,"align":120,"origin":120},[1554],{"type":952,"marks":1555,"text":964},[1556],{"type":960,"attrs":1557},{"color":962,"name":963},{"type":948,"attrs":1559,"content":1560},{"indent":7,"number":7,"align":120,"origin":120},[1561],{"type":952,"marks":1562,"text":1565},[1563],{"type":960,"attrs":1564},{"color":962,"name":963},"与之前的例子相比,上述代码片段有两个重大变化:",{"type":1163,"content":1567},[1568,1597],{"type":1166,"attrs":1569,"content":1570},{"listStyle":120},[1571],{"type":948,"attrs":1572,"content":1573},{"indent":7,"number":7,"align":120,"origin":120},[1574,1579,1586,1588,1595],{"type":952,"marks":1575,"text":1578},[1576],{"type":960,"attrs":1577},{"color":962,"name":963},"我们现在定义了一个 id 为",{"type":1041,"content":1580,"marks":1583},[1581],{"type":952,"text":1582},"\"DataFrame\"",[1584],{"type":960,"attrs":1585},{"color":1178,"name":963},{"type":952,"text":1587},"的",{"type":1041,"content":1589,"marks":1592},[1590],{"type":952,"text":1591},"div",[1593],{"type":960,"attrs":1594},{"color":1178,"name":963},{"type":952,"text":1596},",这样稍后就可以引用。",{"type":1166,"attrs":1598,"content":1599},{"listStyle":120},[1600],{"type":948,"attrs":1601,"content":1602},{"indent":7,"number":7,"align":120,"origin":120},[1603,1608,1614,1616,1622,1624,1630,1632,1639,1641,1647,1649,1655],{"type":952,"marks":1604,"text":1607},[1605],{"type":960,"attrs":1606},{"color":962,"name":963},"在",{"type":1041,"content":1609,"marks":1611},[1610],{"type":952,"text":1107},[1612],{"type":960,"attrs":1613},{"color":1178,"name":963},{"type":952,"text":1615},"标签中,我们创建一个与之前相同的",{"type":1041,"content":1617,"marks":1619},[1618],{"type":952,"text":1465},[1620],{"type":960,"attrs":1621},{"color":1178,"name":963},{"type":952,"text":1623},"对象。但现在,我们不是调用",{"type":1041,"content":1625,"marks":1627},[1626],{"type":952,"text":1505},[1628],{"type":960,"attrs":1629},{"color":1178,"name":963},{"type":952,"text":1631},",而是调用",{"type":1041,"content":1633,"marks":1636},[1634],{"type":952,"text":1635},"pyscript.write",[1637],{"type":960,"attrs":1638},{"color":1178,"name":963},{"type":952,"text":1640},"函数,请求 PyScript 处理并在",{"type":1041,"content":1642,"marks":1644},[1643],{"type":952,"text":1582},[1645],{"type":960,"attrs":1646},{"color":1178,"name":963},{"type":952,"text":1648},"中显示",{"type":1041,"content":1650,"marks":1652},[1651],{"type":952,"text":1465},[1653],{"type":960,"attrs":1654},{"color":1178,"name":963},{"type":952,"text":1656},"对象。从输出可以看到,我们现在有一个结构化的表格了。",{"type":948,"attrs":1658,"content":1659},{"indent":7,"number":7,"align":120,"origin":120},[1660],{"type":952,"marks":1661,"text":964},[1662],{"type":960,"attrs":1663},{"color":962,"name":963},{"type":948,"attrs":1665,"content":1666},{"indent":7,"number":7,"align":120,"origin":120},[1667,1673,1678,1685],{"type":1041,"content":1668,"marks":1670},[1669],{"type":952,"text":1477},[1671],{"type":960,"attrs":1672},{"color":962,"name":963},{"type":952,"marks":1674,"text":1677},[1675],{"type":960,"attrs":1676},{"color":962,"name":963},"函数不仅能够打印表格,还能够打印数字。下面的例子向你展示了我们如何使用",{"type":1041,"content":1679,"marks":1682},[1680],{"type":952,"text":1681},"matplotlib",[1683],{"type":960,"attrs":1684},{"color":962,"name":963},{"type":952,"marks":1686,"text":1689},[1687],{"type":960,"attrs":1688},{"color":962,"name":963},"(一个流行的Python包,用于数据可视化)来显示由 Python 创建的图。",{"type":948,"attrs":1691},{"indent":7,"number":7,"align":120,"origin":120},{"type":1119,"attrs":1693},{"src":1694,"alt":120,"title":120,"style":1695,"href":120,"fromPaste":896,"pastePass":896},"https://static001.geekbang.org/infoq/67/67aa8e871dffbace046e760e4249ec4d.png",[1696,1697],{"key":1124,"value":1125},{"key":1127,"value":1128},{"type":948,"attrs":1699},{"indent":7,"number":7,"align":120,"origin":120},{"type":1119,"attrs":1701},{"src":1702,"alt":120,"title":120,"style":1703,"href":120,"fromPaste":896,"pastePass":896},"https://static001.geekbang.org/infoq/9c/9c5c42ab5a569023ab63df58dfbedcab.png",[1704,1705],{"key":1124,"value":1125},{"key":1127,"value":1128},{"type":948,"attrs":1707,"content":1708},{"indent":7,"number":7,"align":1139,"origin":120},[1709],{"type":952,"marks":1710,"text":1715},[1711,1713],{"type":1144,"attrs":1712},{"size":791},{"type":960,"attrs":1714},{"color":962,"name":963},"PyScript打印图(图片由作者提供)",{"type":948,"attrs":1717,"content":1718},{"indent":7,"number":7,"align":120,"origin":120},[1719],{"type":952,"marks":1720,"text":964},[1721],{"type":960,"attrs":1722},{"color":962,"name":963},{"type":948,"attrs":1724,"content":1725},{"indent":7,"number":7,"align":120,"origin":120},[1726,1731,1737],{"type":952,"marks":1727,"text":1730},[1728],{"type":960,"attrs":1729},{"color":962,"name":963},"如你所见,",{"type":1041,"content":1732,"marks":1734},[1733],{"type":952,"text":1477},[1735],{"type":960,"attrs":1736},{"color":962,"name":963},{"type":952,"marks":1738,"text":1741},[1739],{"type":960,"attrs":1740},{"color":962,"name":963}," 函数以期望的方式显示了图。",{"type":1024,"attrs":1743,"content":1744},{"align":120,"level":15},[1745],{"type":952,"marks":1746,"text":1749},[1747],{"type":960,"attrs":1748},{"color":962,"name":963},"py-repl标签",{"type":948,"attrs":1751},{"indent":7,"number":7,"align":120,"origin":120},{"type":948,"attrs":1753,"content":1754},{"indent":7,"number":7,"align":120,"origin":120},[1755],{"type":952,"marks":1756,"text":1759},[1757],{"type":960,"attrs":1758},{"color":962,"name":963},"Python 学习的最好方法之一是使用 REPL:读取(Read)、求值(Evaluate)、打印(Print)和循环(Loop)。也就是说,使用一个交互式的 Python 控制台,输入一些代码,Python 对其进行求值并打印适当的输出,然后重复这个过程。Web 页面也可以提供这样的 REPL 环境,比如 Jupyter Notebook。",{"type":948,"attrs":1761,"content":1762},{"indent":7,"number":7,"align":120,"origin":120},[1763],{"type":952,"marks":1764,"text":964},[1765],{"type":960,"attrs":1766},{"color":962,"name":963},{"type":948,"attrs":1768,"content":1769},{"indent":7,"number":7,"align":120,"origin":120},[1770,1775,1782],{"type":952,"marks":1771,"text":1774},[1772],{"type":960,"attrs":1773},{"color":962,"name":963},"PyScript 可以使用",{"type":1041,"content":1776,"marks":1779},[1777],{"type":952,"text":1778},"py-repl",[1780],{"type":960,"attrs":1781},{"color":962,"name":963},{"type":952,"marks":1783,"text":1786},[1784],{"type":960,"attrs":1785},{"color":962,"name":963},"标签提供与此类似的东西。在这个元素中,你可以让用户自己编写代码,也可以以编程方式输入代码。请看下面的例子:",{"type":948,"attrs":1788},{"indent":7,"number":7,"align":120,"origin":120},{"type":1119,"attrs":1790},{"src":1791,"alt":120,"title":120,"style":1792,"href":120,"fromPaste":896,"pastePass":896},"https://static001.geekbang.org/infoq/b6/b66645cc4bc41c399659afaff9f3d7ee.png",[1793,1794],{"key":1124,"value":1125},{"key":1127,"value":1128},{"type":948,"attrs":1796},{"indent":7,"number":7,"align":120,"origin":120},{"type":1119,"attrs":1798},{"src":1799,"alt":120,"title":120,"style":1800,"href":120,"fromPaste":896,"pastePass":896},"https://static001.geekbang.org/infoq/a7/a716f3728f2d077ead11eab508d64477.png",[1801,1802],{"key":1124,"value":1125},{"key":1127,"value":1128},{"type":948,"attrs":1804,"content":1805},{"indent":7,"number":7,"align":1139,"origin":120},[1806],{"type":952,"marks":1807,"text":1812},[1808,1810],{"type":1144,"attrs":1809},{"size":791},{"type":960,"attrs":1811},{"color":962,"name":963},"PyScript REPL(图片由作者提供)",{"type":948,"attrs":1814,"content":1815},{"indent":7,"number":7,"align":120,"origin":120},[1816],{"type":952,"marks":1817,"text":964},[1818],{"type":960,"attrs":1819},{"color":962,"name":963},{"type":948,"attrs":1821,"content":1822},{"indent":7,"number":7,"align":120,"origin":120},[1823,1828,1834,1839,1845],{"type":952,"marks":1824,"text":1827},[1825],{"type":960,"attrs":1826},{"color":962,"name":963},"如你所见,上图中有一个单元格,其中包括在",{"type":1041,"content":1829,"marks":1831},[1830],{"type":952,"text":1778},[1832],{"type":960,"attrs":1833},{"color":962,"name":963},{"type":952,"marks":1835,"text":1838},[1836],{"type":960,"attrs":1837},{"color":962,"name":963},"标签中指定的代码。值得注意的是,单元格中的代码可以引用我们之前在",{"type":1041,"content":1840,"marks":1842},[1841],{"type":952,"text":1107},[1843],{"type":960,"attrs":1844},{"color":962,"name":963},{"type":952,"marks":1846,"text":1849},[1847],{"type":960,"attrs":1848},{"color":962,"name":963},"标签中定义的变量。一切看起来都很协调。",{"type":1024,"attrs":1851,"content":1852},{"align":120,"level":15},[1853],{"type":952,"marks":1854,"text":1857},[1855],{"type":960,"attrs":1856},{"color":962,"name":963},"感想",{"type":948,"attrs":1859},{"indent":7,"number":7,"align":120,"origin":120},{"type":948,"attrs":1861,"content":1862},{"indent":7,"number":7,"align":120,"origin":120},[1863],{"type":952,"marks":1864,"text":1867},[1865],{"type":960,"attrs":1866},{"color":962,"name":963},"本文介绍的内容是现阶段 PyScript 所能提供的主要亮点。它似乎是一个很有前途的产品,因为它提供了一个灵活的框架,让 Python 程序员可以在没有太多 Web 开发知识的情况下创建 Web 应用。然而,也有其他类似的成功的产品,因此,竞争会很激烈。",{"type":948,"attrs":1869,"content":1870},{"indent":7,"number":7,"align":120,"origin":120},[1871],{"type":952,"marks":1872,"text":964},[1873],{"type":960,"attrs":1874},{"color":962,"name":963},{"type":948,"attrs":1876,"content":1877},{"indent":7,"number":7,"align":120,"origin":120},[1878],{"type":952,"marks":1879,"text":1882},[1880],{"type":960,"attrs":1881},{"color":962,"name":963},"例如,如果我需要为自己的数据科学项目创建一个 Web 应用,我就会直接使用 Streamlit。它的功能已经相对成熟。请注意,虽然都与 Web 开发有关,但 PyScript 和 Streamlit 属于不同的产品系。PyScript 应该更通用,因为它的目标是让你可以在任何网页上嵌入任何 Python 代码,Streamlit 做不到这一点。",{"type":948,"attrs":1884,"content":1885},{"indent":7,"number":7,"align":120,"origin":120},[1886],{"type":952,"marks":1887,"text":964},[1888],{"type":960,"attrs":1889},{"color":962,"name":963},{"type":948,"attrs":1891,"content":1892},{"indent":7,"number":7,"align":120,"origin":120},[1893],{"type":952,"marks":1894,"text":1897},[1895],{"type":960,"attrs":1896},{"color":962,"name":963},"在 PyScript 为更多的人所接受之前,它有几个问题必须解决。例如,Web 页面的加载速度非常慢。如果你尝试跟随本教程运行代码,可能就会注意到,在 Web 页面的显示会有一个明显的滞后。",{"type":948,"attrs":1899,"content":1900},{"indent":7,"number":7,"align":120,"origin":120},[1901],{"type":952,"marks":1902,"text":964},[1903],{"type":960,"attrs":1904},{"color":962,"name":963},{"type":948,"attrs":1906,"content":1907},{"indent":7,"number":7,"align":120,"origin":120},[1908],{"type":952,"marks":1909,"text":1912},[1910],{"type":960,"attrs":1911},{"color":962,"name":963},"尽管如此,我还是觉得这个产品会继续发展,我的信心主要来自于它的开发者——给我们带来极好的 Anaconda 工具的 Anaconda 团队。",{"type":948,"attrs":1914},{"indent":7,"number":7,"align":120,"origin":120},{"type":948,"attrs":1916,"content":1917},{"indent":7,"number":7,"align":120,"origin":120},[1918],{"type":952,"marks":1919,"text":1925},[1920,1922],{"type":1921},"italic",{"type":960,"attrs":1923},{"color":1924,"name":963},"#333333","本文最初发布于Better Programming。",{"type":948,"attrs":1927},{"indent":7,"number":7,"align":120,"origin":120},{"type":948,"attrs":1929,"content":1930},{"indent":7,"number":7,"align":120,"origin":120},[1931,1936],{"type":952,"marks":1932,"text":1935},[1933],{"type":960,"attrs":1934},{"color":962,"name":963},"查看英文原文:",{"type":974,"attrs":1937,"content":1939},{"href":1938,"title":977,"type":120},"https://betterprogramming.pub/running-python-script-on-the-web-using-pyscript-the-next-big-thing-8ace9543d75",[1940],{"type":952,"text":1941},"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":938},"https://static-acl-001.geekbang.org/resource/article/95a26bcb608b3462ef1fdcaa10c962f7/content.json?auth_key=1783039462-9c50bc2611e54bd89c587b9f3bc541ba-0-cddf41ce2377cd9f5dfd52a440d1c22a&v_t=1653037602070",[],{"ai_subtitle":6,"ai_subtitle_vtt":6,"subtitle_url":6,"show_subtitle":7,"manuscripts":120},[15,130,928],[924,131,929],[],[],["Reactive",1952],{"$sisMobile":938},["Set"],["ShallowReactive",1955],{"navConfig":-1,"headerMenuList":-1,"articleDetail":-1},"/article/MgtgoehSqE4Sa2dUqzAw",{"loginUser":1958,"main":1962},{"loginUser":1959,"userInfo":1961},["EmptyRef",1960],"null",["EmptyRef",1960],{"isMobile":1963,"isBottom":1965,"nowTime":1966,"isImmersion":1968,"messageCount":1969,"pageAction":1971,"showHeaderNotice":1972,"showHeaderFriendship":1973,"noticeLinePopup":1974,"isArticlePage":1975},["EmptyRef",1964],"false",["EmptyRef",1964],["Ref",1967],1783041232345,["EmptyRef",1964],["EmptyRef",1970],"0",["EmptyRef",1960],["EmptyRef",1964],["EmptyRef",1964],["EmptyRef",1964],["EmptyRef",1964]]</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:"a4aa5249-32f8-4412-81a6-0570dcc28604",buildAssetsDir:"static/web/nuxt/www.infoq.cn",cdnURL:"https://static001.geekbang.org"}}</script></body></html>