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