写点什么

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":1950,"once":1952,"_errors":1953,"serverRendered":743,"path":1955,"pinia":1956},["ShallowReactive",3],{"navConfig":4,"articleDetail":736,"headerMenuList":1800},{"notice":5,"header":8,"footer":333,"bus":399,"web":704},{"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,420,427,434,440,446,452,459,465,471,478,484,490,497,503,510,516,523,528,534,540,546,552,558,564,570,576,581,588,594,601,607,613,619,625,631,637,643,648,654,661,667,673,678,684,689,693,698],{"end_time":401,"img":402,"link":403,"location":404,"name":405,"start_time":406},1790783999,"https://static001.infoq.cn/resource/image/ca/4f/ca7f17d07fc7d2cb287f50be66b8204f.jpg","https://item.jd.com/100289664201.html","线上","联想ThinkStation P4新款高性能工作站",1789920000,{"end_time":408,"img":409,"link":410,"location":411,"name":412,"start_time":413},1789660799,"https://static001.infoq.cn/resource/image/6c/f3/6c98674648c80eb85441298ba383dbf3.png","https://gk.link/a/12LSh","上海","Agent 时代 AI Infra 的全栈重构",1789574400,{"end_time":415,"img":416,"link":417,"location":404,"name":418,"start_time":419},1788537599,"https://static001.infoq.cn/resource/image/d9/37/d9bc804b97347da74c077b650ccd3d37.jpeg","https://events.amazoncloud.cn/agent-for-code-kiro-crew-webinar?ch=30&sch=68&pt=web","亚马逊云科技 AI-DLC 先锋计划特别直播",1788451200,{"end_time":421,"img":422,"link":423,"location":424,"name":425,"start_time":426},1782489599,"https://static001.infoq.cn/resource/image/98/de/9813c0294a3511b79b7b25c7e8a114de.png","https://www.infoq.cn","上海市科学之门A塔","Harness 时代的硅基团队治理",1782057600,{"end_time":428,"img":429,"link":430,"location":431,"name":432,"start_time":433},1778688000,"https://static001.infoq.cn/resource/image/4e/e4/4ee8726a137ac24b4c4f168846f353e4.png","https://create2026.events.net.cn/#/","北京国家会议中心二期","Create2026百度AI开发者大会",1778601600,{"end_time":435,"img":436,"link":437,"location":404,"name":438,"start_time":439},1777564799,"https://static001.infoq.cn/resource/image/46/bd/46772038735yy4da5a4418f96b406cbd.jpg","https://maas.xfyun.cn/modelSquare?ch=maas-infoq-G9n8","讯飞星辰maas平台推广",1772985600,{"end_time":441,"img":442,"link":443,"location":404,"name":444,"start_time":445},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":447,"img":448,"link":449,"location":404,"name":450,"start_time":451},1864569599,"https://static001.infoq.cn/resource/image/df/d7/df1a288f1e97e615ba35cae4a9127ed7.jpg","https://www.infoq.cn/space/snowflake","Snowflake 中文社区上线!",1766073600,{"end_time":453,"img":454,"link":455,"location":456,"name":457,"start_time":458},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":460,"img":461,"link":462,"location":404,"name":463,"start_time":464},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":466,"img":467,"link":468,"location":404,"name":469,"start_time":470},1781020799,"https://static001.infoq.cn/resource/image/1f/4a/1f1d26df4d5598efaa1f1c57fc8a494a.jpeg","https://openlab.cosmoplat.com/skill-contest","AI技能挑战赛",1778256000,{"end_time":472,"img":473,"link":474,"location":475,"name":476,"start_time":477},1784995200,"https://static001.infoq.cn/resource/image/cc/30/cccf687a9892a5776a8c1b0d8ee5b730.jpg","https://adventure-x.org/","1","davx",1784563200,{"end_time":479,"img":480,"link":481,"location":411,"name":482,"start_time":483},1774627199,"https://static001.infoq.cn/resource/image/18/63/1898936d088123092b2ac0478bc72963.png","https://qdrl.qq.com/VDybhsBX","2026腾讯云城市峰会•上海站",1774540800,{"end_time":485,"img":486,"link":487,"location":404,"name":488,"start_time":489},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":491,"img":492,"link":493,"location":494,"name":495,"start_time":496},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":498,"img":499,"link":500,"location":404,"name":501,"start_time":502},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":504,"img":505,"link":506,"location":507,"name":508,"start_time":509},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":511,"img":512,"link":513,"location":411,"name":514,"start_time":515},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":517,"img":518,"link":519,"location":520,"name":521,"start_time":522},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":524,"img":525,"link":462,"location":404,"name":526,"start_time":527},1763654399,"https://static001.infoq.cn/resource/image/15/ca/15b2f71676f5f3928ff5daeb21333dca.png","加入鸿蒙开发者阵营 开拓智能生态新蓝海!",1759248000,{"end_time":529,"img":530,"link":531,"location":404,"name":532,"start_time":533},1761840000,"https://static001.infoq.cn/resource/image/4f/41/4f7808d67c8e31b93d6fc1223716d241.jpg","https://www.infoq.cn/article/Xc1pH6JxKvgK7zFI8wFy","Snowflake 免费培训!欢迎参与!",1758988800,{"end_time":535,"img":536,"link":537,"location":404,"name":538,"start_time":539},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":541,"img":542,"link":543,"location":404,"name":544,"start_time":545},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":547,"img":548,"link":549,"location":404,"name":550,"start_time":551},1758038400,"https://static001.infoq.cn/resource/image/ba/2a/ba3fe8d0e31bdccf7c76f44f3157b12a.jpg","https://qdrl.qq.com/2lbhIc4r","2025腾讯全球数字生态大会",1757952000,{"end_time":553,"img":554,"link":555,"location":411,"name":556,"start_time":557},1753891199,"https://static001.infoq.cn/resource/image/d4/67/d4824160c0c26a3b04edf9dc0f2faa67.jpg","https://online2025.worldaic.com.cn/","WAIC",1753459200,{"end_time":559,"img":560,"link":561,"location":494,"name":562,"start_time":563},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":565,"img":566,"link":567,"location":404,"name":568,"start_time":569},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":571,"img":572,"link":573,"location":404,"name":574,"start_time":575},1753977599,"https://static001.infoq.cn/resource/image/a5/d3/a5518edc427e92079fcd7956daabbcd3.png","https://www.infoq.cn/zones/awscertification-june/","亚马逊培训认证6月",1748707200,{"end_time":571,"img":577,"link":578,"location":404,"name":579,"start_time":580},"https://static001.infoq.cn/resource/image/00/cb/0049b66c781ca3f5b8d5d4de60dde7cb.png","https://qr20.cn/EoJnXW","即刻成为鸿蒙应用开发者 携手共拓鸿蒙世界!",1749398400,{"end_time":582,"img":583,"link":584,"location":585,"name":586,"start_time":587},1749571199,"https://static001.infoq.cn/resource/image/4a/26/4aa6fc20bb1eyy67772eb4a09873e026.png","https://qdrl.qq.com/cljVFWT9","青岛","2025 腾讯云城市峰会",1749484800,{"end_time":589,"img":590,"link":591,"location":411,"name":592,"start_time":593},1750348800,"https://static001.infoq.cn/resource/image/cf/43/cfb7236133b4736ba0a11be8cfae3043.png","https://www.infoq.cn/event/?id=298","亚马逊云SUMMIT",1750262400,{"end_time":595,"img":596,"link":597,"location":598,"name":599,"start_time":600},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":602,"img":603,"link":604,"location":404,"name":605,"start_time":606},1745596799,"https://static001.infoq.cn/resource/image/61/57/6192fd75e85bee189d6cb7a3c34e9957.png","https://cloud.baidu.com/product-s/qianfan_home?track=44ca1a7f797708dfe98a81110b458fe0edf9d479e262c870","百度智能云干帆应用开发平台",1745510400,{"end_time":608,"img":609,"link":610,"location":411,"name":611,"start_time":612},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":614,"img":615,"link":616,"location":404,"name":617,"start_time":618},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":620,"img":621,"link":622,"location":494,"name":623,"start_time":624},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":626,"img":627,"link":628,"location":404,"name":629,"start_time":630},1749139199,"https://static001.infoq.cn/resource/image/8f/5a/8f42b5102d2a6bb01b1yy25de678c05a.jpg","https://www.infoq.cn/article/EiZAWhIT5U9YRPi893NR","开源合规精选培训课程",1745596800,{"end_time":632,"img":633,"link":634,"location":404,"name":635,"start_time":636},1747843199,"https://static001.infoq.cn/resource/image/f4/e7/f4ea438f30b686f709187b789e4a57e7.png","https://sourl.co/geWFmz","亚马逊AI认证4月",1742486400,{"end_time":638,"img":639,"link":640,"location":404,"name":641,"start_time":642},1741881600,"https://static001.infoq.cn/resource/image/b3/d6/b3a02c6ea0269f79af48167yy01eced6.png","https://www.infoq.cn/event/?id=294","为突破而构建数据燃动AI",1739980800,{"end_time":644,"img":645,"link":462,"location":404,"name":646,"start_time":647},1738252800,"https://static001.infoq.cn/resource/image/0b/5a/0b27a8d162d93b7c6ea3e08b60e9f65a.png","即刻加入,成为harmony OS应用开发者",1735056000,{"end_time":649,"img":650,"link":651,"location":494,"name":652,"start_time":653},1734105599,"https://static001.infoq.cn/resource/image/3a/24/3a84c8b7aa904bf46177ff84e8c6cb24.jpg","https://www.infoq.cn/event/?id=293","Al for Data 与大模型训练加速实践 专场",1734019200,{"end_time":655,"img":656,"link":657,"location":658,"name":659,"start_time":660},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":662,"img":663,"link":664,"location":404,"name":665,"start_time":666},1734710399,"https://static001.infoq.cn/resource/image/22/dc/2211300cc2d2acfda040922ef5a6a1dc.png","https://www.infoq.cn/article/otlWQdLRB7ci1K1TPdbZ","字节跳动开源云原生数据仓库ByConity众测",1732636800,{"end_time":668,"img":669,"link":670,"location":411,"name":671,"start_time":672},1733587199,"https://static001.infoq.cn/resource/image/3f/a9/3f7cd8a638c24412fe295d810ae218a9.jpeg","https://www.huodongxing.com/event/6783033754700?qd=OpenTiny","2024华为云开源开发者论坛",1733500800,{"end_time":668,"img":674,"link":675,"location":404,"name":676,"start_time":677},"https://static001.infoq.cn/resource/image/f9/74/f93dd0b1242137659f8e5dd00decdb74.png","https://dev.amazoncloud.cn/competition/detail/genaicompetition?visitfrom=InfoQ1","第三届中国生成式 AI 应用创新挑战赛推广",1732204800,{"end_time":679,"img":680,"link":681,"location":404,"name":682,"start_time":683},1732982399,"https://static001.infoq.cn/resource/image/7e/0d/7e1428b18yy9b081542b4ef08a00ce0d.png","https://jsj.top/f/xU2Gmv","Amazon Q Developer 体验调研",1731513600,{"end_time":685,"img":686,"link":687,"location":404,"name":688,"start_time":683},1734019199,"https://static001.infoq.cn/resource/image/ff/c3/ff1287bf2a34793531813bb811896ac3.png","https://dev.amazoncloud.cn/associate-retake?visitfrom=infoq1","亚马逊云科技助理级认证活动",{"end_time":679,"img":690,"link":691,"location":404,"name":692,"start_time":683},"https://static001.infoq.cn/resource/image/3f/94/3f72e2c02d4a203980f89f3f6e813694.png","https://dev.amazoncloud.cn/learn/aitalent/obtainCertificate?visitfrom=infoQ1","亚马逊云科技AI从业者认证",{"end_time":679,"img":694,"link":695,"location":404,"name":696,"start_time":697},"https://static001.infoq.cn/resource/image/38/9c/38f2a6d31f52ef17781678c0a82dde9c.png","https://cloud.baidu.com/campaign/qianfan/index.html?track=98df3bcb86b429860e9c9fdca4fd2edc50b7882e882c090f","千帆大模型平台特惠专场",1731427200,{"end_time":699,"img":700,"link":701,"location":411,"name":702,"start_time":703},1731427199,"https://static001.infoq.cn/resource/image/81/b4/81e10cbdc5636f5ca57fae44f044b1b4.png","https://baiduworld.baidu.com","百度世界大会",1731340800,[705,708,711,714,717,720,722,724,727,730,733],{"icon":6,"link":706,"name":707},"https://www.infoq.cn/","首页",{"icon":330,"link":709,"name":710},"https://www.infoq.cn/archives","AI会议",{"icon":330,"link":712,"name":713},"https://time.geekbang.org/resource?pt=1","AI课程",{"icon":330,"link":715,"name":716},"https://agicamp.com/ranking-list/?utm_source=infoqbar","AI应用",{"icon":6,"link":718,"name":719},"https://www.infoq.cn/zones/chinatechawards2025/","AI榜单",{"icon":6,"link":721,"name":265},"https://www.infoq.cn/zones/harmonyos/",{"icon":330,"link":543,"name":723},"AI大赛",{"icon":6,"link":725,"name":726},"https://www.infoq.cn/minibook","报告",{"icon":6,"link":728,"name":729},"https://www.infoq.cn/video","视频",{"icon":6,"link":731,"name":732},"https://zhinan.geekbang.com/?utm_source=geektimeweb&utm_medium=menu&gk_source=20241016_geektimeweb_menu","AI指南",{"icon":6,"link":734,"name":735},"https://www.infoq.cn/research","研究中心",{"authorData":737,"id":745,"aid":746,"aidint":747,"type":15,"views":748,"uuid":749,"status":15,"publish_time":750,"ctime":751,"utime":751,"vid":6,"source":15,"sub_status":7,"ip_address":6,"score":750,"article_title":752,"article_sharetitle":752,"article_subtitle":6,"article_summary":753,"article_cover":754,"article_cover_point":755,"author":744,"translator":756,"planner":762,"topic":768,"is_collect":786,"no_author":6,"is_promotion":786,"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":787,"out_id":120,"word_count":788,"front_type":15,"content_short":6,"is_fill_info":7,"show_subtitle":6,"content":789,"ebook":1791,"love":15,"is_love":786,"copyright":15,"lead_author":7,"ppt_url":6,"publisher":1792,"definition":120,"read_status":7,"collect":770,"checker":120,"outlines":120,"content_url":1793,"themes":1794,"audio_status":7,"audio_url":6,"audio_size":7,"ebook_type":7,"video":1795,"form_id":7,"ai_summary":6,"topicIdsMustBeSelected":1796,"topicNamesMustBeSelected":1797,"themeIds":1798,"themeNames":1799},{"uid":738,"nickname":739,"avatar":6,"active":15,"is_early":7,"ucode":740,"uri":741,"author_type":7,"vip":7,"authorLabel":742,"isAuthor":743,"list":744},3009494,"Yong Cui","0CE5A563E9CE0A","/profile/0CE5A563E9CE0A/","作者",true,[737],160494,"161044",161044,21096,"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}",[757],{"uid":758,"nickname":759,"avatar":6,"active":15,"is_early":7,"ucode":760,"uri":761,"author_type":7,"vip":7},1368875,"平川","4D6E74F678F49C","/profile/4D6E74F678F49C/",[763],{"uid":764,"nickname":765,"avatar":6,"active":15,"is_early":7,"ucode":766,"uri":767,"author_type":7,"vip":7},1439149,"邓艳琴","D459E9DD515679","/profile/D459E9DD515679/",[769,771,774,775,778,782,785],{"id":284,"name":285,"alias":6,"type":770},2,{"id":15,"name":772,"alias":773,"type":15},"语言 & 开发","development",{"id":130,"name":131,"alias":132,"type":15},{"id":776,"name":777,"alias":777,"type":15},1121,"GMTC",{"id":779,"name":780,"alias":781,"type":770},50,"Python","python",{"id":783,"name":784,"alias":6,"type":770},1151,"Web",{"id":168,"name":169,"alias":6,"type":770},false,[],2422,{"type":790,"content":791},"doc",[792,802,813,834,841,856,863,871,880,937,944,964,966,977,979,985,996,1003,1011,1105,1112,1120,1122,1128,1130,1136,1146,1153,1161,1169,1200,1207,1215,1217,1223,1225,1231,1241,1248,1279,1286,1292,1335,1343,1374,1376,1382,1384,1390,1400,1407,1415,1506,1513,1539,1541,1547,1549,1555,1565,1572,1591,1599,1601,1609,1616,1636,1638,1644,1646,1652,1662,1669,1699,1707,1709,1717,1724,1732,1739,1747,1754,1762,1764,1775,1777],{"type":793,"content":794},"blockquote",[795],{"type":796,"attrs":797,"content":798},"paragraph",{"indent":7,"number":7,"align":120,"origin":120},[799],{"type":800,"text":801},"text","这是下一个大事件吗?如果继续发展下去,有可能。",{"type":796,"attrs":803,"content":804},{"indent":7,"number":7,"align":120,"origin":120},[805],{"type":800,"marks":806,"text":812},[807],{"type":808,"attrs":809},"color",{"color":810,"name":811},"#494949","user"," ",{"type":796,"attrs":814,"content":815},{"indent":7,"number":7,"align":120,"origin":120},[816,821,829],{"type":800,"marks":817,"text":820},[818],{"type":808,"attrs":819},{"color":810,"name":811},"在 2022年PyCon 美国大会期间,作为主题演讲嘉宾之一的 Peter Wang 公布了 ",{"type":822,"attrs":823,"content":826},"link",{"href":824,"title":825,"type":120},"https://github.com/pyscript/pyscript","xxx",[827],{"type":800,"text":828},"PyScript",{"type":800,"marks":830,"text":833},[831],{"type":808,"attrs":832},{"color":810,"name":811},",一种在 HTML 中直接编写 Python 脚本的方法。或许你不知道 Peter,但你可能听说过 Anaconda,这是一种流行的开源的 Python 和 R 语言的发行版本,特别关注数据科学。Peter 正是 Anaconda 的 CEO 和联合创始人。",{"type":796,"attrs":835,"content":836},{"indent":7,"number":7,"align":120,"origin":120},[837],{"type":800,"marks":838,"text":812},[839],{"type":808,"attrs":840},{"color":810,"name":811},{"type":796,"attrs":842,"content":843},{"indent":7,"number":7,"align":120,"origin":120},[844,849,851],{"type":800,"marks":845,"text":848},[846],{"type":808,"attrs":847},{"color":810,"name":811},"换言之,PyScript 是由一家著名的科技公司开发的,这可能会保证它在不久的将来成为可行的方案。它在 Python 和 Web 开发者中受到了极大的关注,",{"type":800,"text":850},"GitHub",{"type":800,"marks":852,"text":855},[853],{"type":808,"attrs":854},{"color":810,"name":811}," 上已有超过 10k 颗 Stars。然而,它是否能成为一个成功的、有竞争力的产品,取决于长期的时间和开发投入。目前,它还有一些已知的缺陷(将在最后讨论)。",{"type":796,"attrs":857,"content":858},{"indent":7,"number":7,"align":120,"origin":120},[859],{"type":800,"marks":860,"text":812},[861],{"type":808,"attrs":862},{"color":810,"name":811},{"type":796,"attrs":864,"content":865},{"indent":7,"number":7,"align":120,"origin":120},[866],{"type":800,"marks":867,"text":870},[868],{"type":808,"attrs":869},{"color":810,"name":811},"闲话少说,让我们快速了解一下这个令人振奋的产品吧!",{"type":872,"attrs":873,"content":874},"heading",{"align":120,"level":15},[875],{"type":800,"marks":876,"text":879},[877],{"type":808,"attrs":878},{"color":810,"name":811},"py-script标签",{"type":796,"attrs":881,"content":882},{"indent":7,"number":7,"align":120,"origin":120},[883,888,896,901,908,913,920,925,932],{"type":800,"marks":884,"text":887},[885],{"type":808,"attrs":886},{"color":810,"name":811},"我们知道,HTML 文件是大多数网站最常见的元素。在创建网站时,我们的工作就是直接或间接地通过一些框架来编制 HTML 文件。在典型的 HTML 文件中,你会看到各种类型的标签。例如,",{"type":889,"content":890,"marks":893},"codeinline",[891],{"type":800,"text":892},"\u003Chead>",[894],{"type":808,"attrs":895},{"color":810,"name":811},{"type":800,"marks":897,"text":900},[898],{"type":808,"attrs":899},{"color":810,"name":811},"定义了HTML页面的元数据和关键信息,",{"type":889,"content":902,"marks":905},[903],{"type":800,"text":904},"\u003Ctitle>",[906],{"type":808,"attrs":907},{"color":810,"name":811},{"type":800,"marks":909,"text":912},[910],{"type":808,"attrs":911},{"color":810,"name":811},"是整个文档的标题,而",{"type":889,"content":914,"marks":917},[915],{"type":800,"text":916},"\u003Ch1>",[918],{"type":808,"attrs":919},{"color":810,"name":811},{"type":800,"marks":921,"text":924},[922],{"type":808,"attrs":923},{"color":810,"name":811},"、",{"type":889,"content":926,"marks":929},[927],{"type":800,"text":928},"\u003Ch2>",[930],{"type":808,"attrs":931},{"color":810,"name":811},{"type":800,"marks":933,"text":936},[934],{"type":808,"attrs":935},{"color":810,"name":811},"等定义了不同级别的内容标题。",{"type":796,"attrs":938,"content":939},{"indent":7,"number":7,"align":120,"origin":120},[940],{"type":800,"marks":941,"text":812},[942],{"type":808,"attrs":943},{"color":810,"name":811},{"type":796,"attrs":945,"content":946},{"indent":7,"number":7,"align":120,"origin":120},[947,952,959],{"type":800,"marks":948,"text":951},[949],{"type":808,"attrs":950},{"color":810,"name":811},"如前所述,PyScript 允许你在 HTML 中编写Python脚本,它使用一个特殊的标签",{"type":889,"content":953,"marks":956},[954],{"type":800,"text":955},"py-script",[957],{"type":808,"attrs":958},{"color":810,"name":811},{"type":800,"marks":960,"text":963},[961],{"type":808,"attrs":962},{"color":810,"name":811},"。在这个标签中,你可以嵌入 Python 脚本。要了解它是如何工作的,可以创建一个 HTML 文件,其中包含以下代码,并使用 Chrome 浏览器打开该文件。在 Chrome 浏览器中,你应该能够看到类似下面这样的内容:",{"type":796,"attrs":965},{"indent":7,"number":7,"align":120,"origin":120},{"type":967,"attrs":968},"image",{"src":969,"alt":120,"title":120,"style":970,"href":120,"fromPaste":743,"pastePass":743},"https://static001.geekbang.org/infoq/b7/b7cf3649eb920dfd76b246074c54a8f0.png",[971,974],{"key":972,"value":973},"width","75%",{"key":975,"value":976},"bordertype","none",{"type":796,"attrs":978},{"indent":7,"number":7,"align":120,"origin":120},{"type":967,"attrs":980},{"src":981,"alt":120,"title":120,"style":982,"href":120,"fromPaste":743,"pastePass":743},"https://static001.geekbang.org/infoq/d1/d1c8a6e49c89d1695ab45b26f726d77e.png",[983,984],{"key":972,"value":973},{"key":975,"value":976},{"type":796,"attrs":986,"content":988},{"indent":7,"number":7,"align":987,"origin":120},"center",[989],{"type":800,"marks":990,"text":995},[991],{"type":992,"attrs":993},"size",{"size":994},9,"作者截图",{"type":796,"attrs":997,"content":998},{"indent":7,"number":7,"align":120,"origin":120},[999],{"type":800,"marks":1000,"text":812},[1001],{"type":808,"attrs":1002},{"color":810,"name":811},{"type":796,"attrs":1004,"content":1005},{"indent":7,"number":7,"align":120,"origin":120},[1006],{"type":800,"marks":1007,"text":1010},[1008],{"type":808,"attrs":1009},{"color":810,"name":811},"在上面的代码片段中,你可能已经注意到以下三个关键点:",{"type":1012,"content":1013},"bulletedlist",[1014,1039,1077],{"type":1015,"attrs":1016,"content":1017},"listitem",{"listStyle":120},[1018],{"type":796,"attrs":1019,"content":1020},{"indent":7,"number":7,"align":120,"origin":120},[1021,1028,1030,1037],{"type":889,"content":1022,"marks":1024},[1023],{"type":800,"text":822},[1025],{"type":808,"attrs":1026},{"color":1027,"name":811},"#292929",{"type":800,"text":1029},"标签定义了一个外部样式表。在这个例子中,我们使用了 PyScript 提供的",{"type":889,"content":1031,"marks":1034},[1032],{"type":800,"text":1033},"css",[1035],{"type":808,"attrs":1036},{"color":1027,"name":811},{"type":800,"text":1038},"文件。",{"type":1015,"attrs":1040,"content":1041},{"listStyle":120},[1042],{"type":796,"attrs":1043,"content":1044},{"indent":7,"number":7,"align":120,"origin":120},[1045,1050,1057,1059,1066,1068,1075],{"type":800,"marks":1046,"text":1049},[1047],{"type":808,"attrs":1048},{"color":810,"name":811},"我们使用",{"type":889,"content":1051,"marks":1054},[1052],{"type":800,"text":1053},"script",[1055],{"type":808,"attrs":1056},{"color":1027,"name":811},{"type":800,"text":1058},"标签来嵌入一个由",{"type":889,"content":1060,"marks":1063},[1061],{"type":800,"text":1062},"src",[1064],{"type":808,"attrs":1065},{"color":1027,"name":811},{"type":800,"text":1067},"定义、由 PyScript 托管的外部脚本。我们使用了",{"type":889,"content":1069,"marks":1072},[1070],{"type":800,"text":1071},"defer",[1073],{"type":808,"attrs":1074},{"color":1027,"name":811},{"type":800,"text":1076},",这样脚本会在下载和页面解析完成后执行——本质上是一种延迟执行,而不是实时执行。",{"type":1015,"attrs":1078,"content":1079},{"listStyle":120},[1080],{"type":796,"attrs":1081,"content":1082},{"indent":7,"number":7,"align":120,"origin":120},[1083,1088,1094,1096,1103],{"type":800,"marks":1084,"text":1087},[1085],{"type":808,"attrs":1086},{"color":810,"name":811},"最有趣的部分是",{"type":889,"content":1089,"marks":1091},[1090],{"type":800,"text":955},[1092],{"type":808,"attrs":1093},{"color":1027,"name":811},{"type":800,"text":1095},"标签。如你所见,",{"type":889,"content":1097,"marks":1100},[1098],{"type":800,"text":1099},"print(\"Hello, World!\")",[1101],{"type":808,"attrs":1102},{"color":1027,"name":811},{"type":800,"text":1104},"是 Python 代码。当执行 HTML 文件时,就可以看到代码求值结果。",{"type":796,"attrs":1106,"content":1107},{"indent":7,"number":7,"align":120,"origin":120},[1108],{"type":800,"marks":1109,"text":812},[1110],{"type":808,"attrs":1111},{"color":810,"name":811},{"type":796,"attrs":1113,"content":1114},{"indent":7,"number":7,"align":120,"origin":120},[1115],{"type":800,"marks":1116,"text":1119},[1117],{"type":808,"attrs":1118},{"color":810,"name":811},"这很酷,不是吗?如果你不熟悉 Web 开发,但了解 Python,就可以使用 PyScript 嵌入任何有效的 Python 代码。让我们再看一个例子。",{"type":796,"attrs":1121},{"indent":7,"number":7,"align":120,"origin":120},{"type":967,"attrs":1123},{"src":1124,"alt":120,"title":120,"style":1125,"href":120,"fromPaste":743,"pastePass":743},"https://static001.geekbang.org/infoq/80/80c04d7afe33fd0f4d34f391847a8e75.png",[1126,1127],{"key":972,"value":973},{"key":975,"value":976},{"type":796,"attrs":1129},{"indent":7,"number":7,"align":120,"origin":120},{"type":967,"attrs":1131},{"src":1132,"alt":120,"title":120,"style":1133,"href":120,"fromPaste":743,"pastePass":743},"https://static001.geekbang.org/infoq/ff/ff83f9e4bfead1f156366ce957063170.png",[1134,1135],{"key":972,"value":973},{"key":975,"value":976},{"type":796,"attrs":1137,"content":1138},{"indent":7,"number":7,"align":987,"origin":120},[1139],{"type":800,"marks":1140,"text":1145},[1141,1143],{"type":992,"attrs":1142},{"size":994},{"type":808,"attrs":1144},{"color":810,"name":811},"另一个PyScript示例(图片由作者提供)",{"type":796,"attrs":1147,"content":1148},{"indent":7,"number":7,"align":120,"origin":120},[1149],{"type":800,"marks":1150,"text":812},[1151],{"type":808,"attrs":1152},{"color":810,"name":811},{"type":796,"attrs":1154,"content":1155},{"indent":7,"number":7,"align":120,"origin":120},[1156],{"type":800,"marks":1157,"text":1160},[1158],{"type":808,"attrs":1159},{"color":810,"name":811},"在这里,我们写了一些需要计算的代码,可以看到,脚本得到了正确的执行。",{"type":872,"attrs":1162,"content":1163},{"align":120,"level":15},[1164],{"type":800,"marks":1165,"text":1168},[1166],{"type":808,"attrs":1167},{"color":810,"name":811},"py-env标签",{"type":796,"attrs":1170,"content":1171},{"indent":7,"number":7,"align":120,"origin":120},[1172,1177,1184,1189,1195],{"type":800,"marks":1173,"text":1176},[1174],{"type":808,"attrs":1175},{"color":810,"name":811},"在编写更复杂的代码时,就需要使用第三方库。在这种情况下,我们可以利用",{"type":889,"content":1178,"marks":1181},[1179],{"type":800,"text":1180},"py-env",[1182],{"type":808,"attrs":1183},{"color":810,"name":811},{"type":800,"marks":1185,"text":1188},[1186],{"type":808,"attrs":1187},{"color":810,"name":811},"标签。你可能已经猜到的,env 是 environment 的缩写。",{"type":889,"content":1190,"marks":1192},[1191],{"type":800,"text":1180},[1193],{"type":808,"attrs":1194},{"color":810,"name":811},{"type":800,"marks":1196,"text":1199},[1197],{"type":808,"attrs":1198},{"color":810,"name":811},"标签中列出了运行代码所需的 Python 包。",{"type":796,"attrs":1201,"content":1202},{"indent":7,"number":7,"align":120,"origin":120},[1203],{"type":800,"marks":1204,"text":812},[1205],{"type":808,"attrs":1206},{"color":810,"name":811},{"type":796,"attrs":1208,"content":1209},{"indent":7,"number":7,"align":120,"origin":120},[1210],{"type":800,"marks":1211,"text":1214},[1212],{"type":808,"attrs":1213},{"color":810,"name":811},"你可能知道,许多数据科学家都使用 pandas 进行数据处理工作。让我们看看下面的例子。",{"type":796,"attrs":1216},{"indent":7,"number":7,"align":120,"origin":120},{"type":967,"attrs":1218},{"src":1219,"alt":120,"title":120,"style":1220,"href":120,"fromPaste":743,"pastePass":743},"https://static001.geekbang.org/infoq/81/81a2e07ff71a317924c7664120862b6e.png",[1221,1222],{"key":972,"value":973},{"key":975,"value":976},{"type":796,"attrs":1224},{"indent":7,"number":7,"align":120,"origin":120},{"type":967,"attrs":1226},{"src":1227,"alt":120,"title":120,"style":1228,"href":120,"fromPaste":743,"pastePass":743},"https://static001.geekbang.org/infoq/df/df79380011e061d1030cfe721b89989b.png",[1229,1230],{"key":972,"value":973},{"key":975,"value":976},{"type":796,"attrs":1232,"content":1233},{"indent":7,"number":7,"align":987,"origin":120},[1234],{"type":800,"marks":1235,"text":1240},[1236,1238],{"type":992,"attrs":1237},{"size":994},{"type":808,"attrs":1239},{"color":810,"name":811},"使用包的PyScript(图片由作者提供)",{"type":796,"attrs":1242,"content":1243},{"indent":7,"number":7,"align":120,"origin":120},[1244],{"type":800,"marks":1245,"text":812},[1246],{"type":808,"attrs":1247},{"color":810,"name":811},{"type":796,"attrs":1249,"content":1250},{"indent":7,"number":7,"align":120,"origin":120},[1251,1256,1262,1267,1274],{"type":800,"marks":1252,"text":1255},[1253],{"type":808,"attrs":1254},{"color":810,"name":811},"如你所见,我们在",{"type":889,"content":1257,"marks":1259},[1258],{"type":800,"text":1180},[1260],{"type":808,"attrs":1261},{"color":810,"name":811},{"type":800,"marks":1263,"text":1266},[1264],{"type":808,"attrs":1265},{"color":810,"name":811},"标签中指定了依赖项(即 Pandas),该标签包含在",{"type":889,"content":1268,"marks":1271},[1269],{"type":800,"text":1270},"head",[1272],{"type":808,"attrs":1273},{"color":810,"name":811},{"type":800,"marks":1275,"text":1278},[1276],{"type":808,"attrs":1277},{"color":810,"name":811},"标签中。如果页面需要多个依赖项,可以在这里把它们全部列出:",{"type":796,"attrs":1280,"content":1281},{"indent":7,"number":7,"align":120,"origin":120},[1282],{"type":800,"marks":1283,"text":812},[1284],{"type":808,"attrs":1285},{"color":810,"name":811},{"type":1287,"attrs":1288,"content":1289},"codeblock",{"lang":120},[1290],{"type":800,"text":1291},"\u003Cpy-env>\n - pandas\n - matplotlib\n - numpy\n\u003C/py-env>",{"type":796,"attrs":1293,"content":1294},{"indent":7,"number":7,"align":120,"origin":120},[1295,1300,1306,1311,1318,1323,1330],{"type":800,"marks":1296,"text":1299},[1297],{"type":808,"attrs":1298},{"color":810,"name":811},"如你所见,在",{"type":889,"content":1301,"marks":1303},[1302],{"type":800,"text":955},[1304],{"type":808,"attrs":1305},{"color":810,"name":811},{"type":800,"marks":1307,"text":1310},[1308],{"type":808,"attrs":1309},{"color":810,"name":811},"标签中,我们确实可以使用 Pandas 库来创建一个",{"type":889,"content":1312,"marks":1315},[1313],{"type":800,"text":1314},"DataFrame",[1316],{"type":808,"attrs":1317},{"color":810,"name":811},{"type":800,"marks":1319,"text":1322},[1320],{"type":808,"attrs":1321},{"color":810,"name":811},"对象。然而,当我们把打印出来时就会发现,它是一个单行,而不是一个结构化的数据表。没有一个适当的结构,我们就无法理解这些数据。幸运的是,我们可以使用",{"type":889,"content":1324,"marks":1327},[1325],{"type":800,"text":1326},"write",[1328],{"type":808,"attrs":1329},{"color":810,"name":811},{"type":800,"marks":1331,"text":1334},[1332],{"type":808,"attrs":1333},{"color":810,"name":811},"函数(下文会讨论)。",{"type":872,"attrs":1336,"content":1337},{"align":120,"level":15},[1338],{"type":800,"marks":1339,"text":1342},[1340],{"type":808,"attrs":1341},{"color":810,"name":811},"将内容写入指定标签",{"type":796,"attrs":1344,"content":1345},{"indent":7,"number":7,"align":120,"origin":120},[1346,1351,1358,1363,1369],{"type":800,"marks":1347,"text":1350},[1348],{"type":808,"attrs":1349},{"color":810,"name":811},"除了Python中的标准打印函数",{"type":889,"content":1352,"marks":1355},[1353],{"type":800,"text":1354},"print",[1356],{"type":808,"attrs":1357},{"color":810,"name":811},{"type":800,"marks":1359,"text":1362},[1360],{"type":808,"attrs":1361},{"color":810,"name":811},",作为脚本的一部分,PyScript有自己的",{"type":889,"content":1364,"marks":1366},[1365],{"type":800,"text":1326},[1367],{"type":808,"attrs":1368},{"color":810,"name":811},{"type":800,"marks":1370,"text":1373},[1371],{"type":808,"attrs":1372},{"color":810,"name":811},"函数,可以将数据发送到页面上指定的Web元素中。请看下面的例子:",{"type":796,"attrs":1375},{"indent":7,"number":7,"align":120,"origin":120},{"type":967,"attrs":1377},{"src":1378,"alt":120,"title":120,"style":1379,"href":120,"fromPaste":743,"pastePass":743},"https://static001.geekbang.org/infoq/54/548175e28244c2b86e5b35db19bdf9ff.png",[1380,1381],{"key":972,"value":973},{"key":975,"value":976},{"type":796,"attrs":1383},{"indent":7,"number":7,"align":120,"origin":120},{"type":967,"attrs":1385},{"src":1386,"alt":120,"title":120,"style":1387,"href":120,"fromPaste":743,"pastePass":743},"https://static001.geekbang.org/infoq/f6/f612d73015a7a21224b20561347bf3b2.png",[1388,1389],{"key":972,"value":973},{"key":975,"value":976},{"type":796,"attrs":1391,"content":1392},{"indent":7,"number":7,"align":987,"origin":120},[1393],{"type":800,"marks":1394,"text":1399},[1395,1397],{"type":992,"attrs":1396},{"size":994},{"type":808,"attrs":1398},{"color":810,"name":811},"PyScript 写函数 write(图片由作者提供)",{"type":796,"attrs":1401,"content":1402},{"indent":7,"number":7,"align":120,"origin":120},[1403],{"type":800,"marks":1404,"text":812},[1405],{"type":808,"attrs":1406},{"color":810,"name":811},{"type":796,"attrs":1408,"content":1409},{"indent":7,"number":7,"align":120,"origin":120},[1410],{"type":800,"marks":1411,"text":1414},[1412],{"type":808,"attrs":1413},{"color":810,"name":811},"与之前的例子相比,上述代码片段有两个重大变化:",{"type":1012,"content":1416},[1417,1446],{"type":1015,"attrs":1418,"content":1419},{"listStyle":120},[1420],{"type":796,"attrs":1421,"content":1422},{"indent":7,"number":7,"align":120,"origin":120},[1423,1428,1435,1437,1444],{"type":800,"marks":1424,"text":1427},[1425],{"type":808,"attrs":1426},{"color":810,"name":811},"我们现在定义了一个 id 为",{"type":889,"content":1429,"marks":1432},[1430],{"type":800,"text":1431},"\"DataFrame\"",[1433],{"type":808,"attrs":1434},{"color":1027,"name":811},{"type":800,"text":1436},"的",{"type":889,"content":1438,"marks":1441},[1439],{"type":800,"text":1440},"div",[1442],{"type":808,"attrs":1443},{"color":1027,"name":811},{"type":800,"text":1445},",这样稍后就可以引用。",{"type":1015,"attrs":1447,"content":1448},{"listStyle":120},[1449],{"type":796,"attrs":1450,"content":1451},{"indent":7,"number":7,"align":120,"origin":120},[1452,1457,1463,1465,1471,1473,1479,1481,1488,1490,1496,1498,1504],{"type":800,"marks":1453,"text":1456},[1454],{"type":808,"attrs":1455},{"color":810,"name":811},"在",{"type":889,"content":1458,"marks":1460},[1459],{"type":800,"text":955},[1461],{"type":808,"attrs":1462},{"color":1027,"name":811},{"type":800,"text":1464},"标签中,我们创建一个与之前相同的",{"type":889,"content":1466,"marks":1468},[1467],{"type":800,"text":1314},[1469],{"type":808,"attrs":1470},{"color":1027,"name":811},{"type":800,"text":1472},"对象。但现在,我们不是调用",{"type":889,"content":1474,"marks":1476},[1475],{"type":800,"text":1354},[1477],{"type":808,"attrs":1478},{"color":1027,"name":811},{"type":800,"text":1480},",而是调用",{"type":889,"content":1482,"marks":1485},[1483],{"type":800,"text":1484},"pyscript.write",[1486],{"type":808,"attrs":1487},{"color":1027,"name":811},{"type":800,"text":1489},"函数,请求 PyScript 处理并在",{"type":889,"content":1491,"marks":1493},[1492],{"type":800,"text":1431},[1494],{"type":808,"attrs":1495},{"color":1027,"name":811},{"type":800,"text":1497},"中显示",{"type":889,"content":1499,"marks":1501},[1500],{"type":800,"text":1314},[1502],{"type":808,"attrs":1503},{"color":1027,"name":811},{"type":800,"text":1505},"对象。从输出可以看到,我们现在有一个结构化的表格了。",{"type":796,"attrs":1507,"content":1508},{"indent":7,"number":7,"align":120,"origin":120},[1509],{"type":800,"marks":1510,"text":812},[1511],{"type":808,"attrs":1512},{"color":810,"name":811},{"type":796,"attrs":1514,"content":1515},{"indent":7,"number":7,"align":120,"origin":120},[1516,1522,1527,1534],{"type":889,"content":1517,"marks":1519},[1518],{"type":800,"text":1326},[1520],{"type":808,"attrs":1521},{"color":810,"name":811},{"type":800,"marks":1523,"text":1526},[1524],{"type":808,"attrs":1525},{"color":810,"name":811},"函数不仅能够打印表格,还能够打印数字。下面的例子向你展示了我们如何使用",{"type":889,"content":1528,"marks":1531},[1529],{"type":800,"text":1530},"matplotlib",[1532],{"type":808,"attrs":1533},{"color":810,"name":811},{"type":800,"marks":1535,"text":1538},[1536],{"type":808,"attrs":1537},{"color":810,"name":811},"(一个流行的Python包,用于数据可视化)来显示由 Python 创建的图。",{"type":796,"attrs":1540},{"indent":7,"number":7,"align":120,"origin":120},{"type":967,"attrs":1542},{"src":1543,"alt":120,"title":120,"style":1544,"href":120,"fromPaste":743,"pastePass":743},"https://static001.geekbang.org/infoq/67/67aa8e871dffbace046e760e4249ec4d.png",[1545,1546],{"key":972,"value":973},{"key":975,"value":976},{"type":796,"attrs":1548},{"indent":7,"number":7,"align":120,"origin":120},{"type":967,"attrs":1550},{"src":1551,"alt":120,"title":120,"style":1552,"href":120,"fromPaste":743,"pastePass":743},"https://static001.geekbang.org/infoq/9c/9c5c42ab5a569023ab63df58dfbedcab.png",[1553,1554],{"key":972,"value":973},{"key":975,"value":976},{"type":796,"attrs":1556,"content":1557},{"indent":7,"number":7,"align":987,"origin":120},[1558],{"type":800,"marks":1559,"text":1564},[1560,1562],{"type":992,"attrs":1561},{"size":994},{"type":808,"attrs":1563},{"color":810,"name":811},"PyScript打印图(图片由作者提供)",{"type":796,"attrs":1566,"content":1567},{"indent":7,"number":7,"align":120,"origin":120},[1568],{"type":800,"marks":1569,"text":812},[1570],{"type":808,"attrs":1571},{"color":810,"name":811},{"type":796,"attrs":1573,"content":1574},{"indent":7,"number":7,"align":120,"origin":120},[1575,1580,1586],{"type":800,"marks":1576,"text":1579},[1577],{"type":808,"attrs":1578},{"color":810,"name":811},"如你所见,",{"type":889,"content":1581,"marks":1583},[1582],{"type":800,"text":1326},[1584],{"type":808,"attrs":1585},{"color":810,"name":811},{"type":800,"marks":1587,"text":1590},[1588],{"type":808,"attrs":1589},{"color":810,"name":811}," 函数以期望的方式显示了图。",{"type":872,"attrs":1592,"content":1593},{"align":120,"level":15},[1594],{"type":800,"marks":1595,"text":1598},[1596],{"type":808,"attrs":1597},{"color":810,"name":811},"py-repl标签",{"type":796,"attrs":1600},{"indent":7,"number":7,"align":120,"origin":120},{"type":796,"attrs":1602,"content":1603},{"indent":7,"number":7,"align":120,"origin":120},[1604],{"type":800,"marks":1605,"text":1608},[1606],{"type":808,"attrs":1607},{"color":810,"name":811},"Python 学习的最好方法之一是使用 REPL:读取(Read)、求值(Evaluate)、打印(Print)和循环(Loop)。也就是说,使用一个交互式的 Python 控制台,输入一些代码,Python 对其进行求值并打印适当的输出,然后重复这个过程。Web 页面也可以提供这样的 REPL 环境,比如 Jupyter Notebook。",{"type":796,"attrs":1610,"content":1611},{"indent":7,"number":7,"align":120,"origin":120},[1612],{"type":800,"marks":1613,"text":812},[1614],{"type":808,"attrs":1615},{"color":810,"name":811},{"type":796,"attrs":1617,"content":1618},{"indent":7,"number":7,"align":120,"origin":120},[1619,1624,1631],{"type":800,"marks":1620,"text":1623},[1621],{"type":808,"attrs":1622},{"color":810,"name":811},"PyScript 可以使用",{"type":889,"content":1625,"marks":1628},[1626],{"type":800,"text":1627},"py-repl",[1629],{"type":808,"attrs":1630},{"color":810,"name":811},{"type":800,"marks":1632,"text":1635},[1633],{"type":808,"attrs":1634},{"color":810,"name":811},"标签提供与此类似的东西。在这个元素中,你可以让用户自己编写代码,也可以以编程方式输入代码。请看下面的例子:",{"type":796,"attrs":1637},{"indent":7,"number":7,"align":120,"origin":120},{"type":967,"attrs":1639},{"src":1640,"alt":120,"title":120,"style":1641,"href":120,"fromPaste":743,"pastePass":743},"https://static001.geekbang.org/infoq/b6/b66645cc4bc41c399659afaff9f3d7ee.png",[1642,1643],{"key":972,"value":973},{"key":975,"value":976},{"type":796,"attrs":1645},{"indent":7,"number":7,"align":120,"origin":120},{"type":967,"attrs":1647},{"src":1648,"alt":120,"title":120,"style":1649,"href":120,"fromPaste":743,"pastePass":743},"https://static001.geekbang.org/infoq/a7/a716f3728f2d077ead11eab508d64477.png",[1650,1651],{"key":972,"value":973},{"key":975,"value":976},{"type":796,"attrs":1653,"content":1654},{"indent":7,"number":7,"align":987,"origin":120},[1655],{"type":800,"marks":1656,"text":1661},[1657,1659],{"type":992,"attrs":1658},{"size":994},{"type":808,"attrs":1660},{"color":810,"name":811},"PyScript REPL(图片由作者提供)",{"type":796,"attrs":1663,"content":1664},{"indent":7,"number":7,"align":120,"origin":120},[1665],{"type":800,"marks":1666,"text":812},[1667],{"type":808,"attrs":1668},{"color":810,"name":811},{"type":796,"attrs":1670,"content":1671},{"indent":7,"number":7,"align":120,"origin":120},[1672,1677,1683,1688,1694],{"type":800,"marks":1673,"text":1676},[1674],{"type":808,"attrs":1675},{"color":810,"name":811},"如你所见,上图中有一个单元格,其中包括在",{"type":889,"content":1678,"marks":1680},[1679],{"type":800,"text":1627},[1681],{"type":808,"attrs":1682},{"color":810,"name":811},{"type":800,"marks":1684,"text":1687},[1685],{"type":808,"attrs":1686},{"color":810,"name":811},"标签中指定的代码。值得注意的是,单元格中的代码可以引用我们之前在",{"type":889,"content":1689,"marks":1691},[1690],{"type":800,"text":955},[1692],{"type":808,"attrs":1693},{"color":810,"name":811},{"type":800,"marks":1695,"text":1698},[1696],{"type":808,"attrs":1697},{"color":810,"name":811},"标签中定义的变量。一切看起来都很协调。",{"type":872,"attrs":1700,"content":1701},{"align":120,"level":15},[1702],{"type":800,"marks":1703,"text":1706},[1704],{"type":808,"attrs":1705},{"color":810,"name":811},"感想",{"type":796,"attrs":1708},{"indent":7,"number":7,"align":120,"origin":120},{"type":796,"attrs":1710,"content":1711},{"indent":7,"number":7,"align":120,"origin":120},[1712],{"type":800,"marks":1713,"text":1716},[1714],{"type":808,"attrs":1715},{"color":810,"name":811},"本文介绍的内容是现阶段 PyScript 所能提供的主要亮点。它似乎是一个很有前途的产品,因为它提供了一个灵活的框架,让 Python 程序员可以在没有太多 Web 开发知识的情况下创建 Web 应用。然而,也有其他类似的成功的产品,因此,竞争会很激烈。",{"type":796,"attrs":1718,"content":1719},{"indent":7,"number":7,"align":120,"origin":120},[1720],{"type":800,"marks":1721,"text":812},[1722],{"type":808,"attrs":1723},{"color":810,"name":811},{"type":796,"attrs":1725,"content":1726},{"indent":7,"number":7,"align":120,"origin":120},[1727],{"type":800,"marks":1728,"text":1731},[1729],{"type":808,"attrs":1730},{"color":810,"name":811},"例如,如果我需要为自己的数据科学项目创建一个 Web 应用,我就会直接使用 Streamlit。它的功能已经相对成熟。请注意,虽然都与 Web 开发有关,但 PyScript 和 Streamlit 属于不同的产品系。PyScript 应该更通用,因为它的目标是让你可以在任何网页上嵌入任何 Python 代码,Streamlit 做不到这一点。",{"type":796,"attrs":1733,"content":1734},{"indent":7,"number":7,"align":120,"origin":120},[1735],{"type":800,"marks":1736,"text":812},[1737],{"type":808,"attrs":1738},{"color":810,"name":811},{"type":796,"attrs":1740,"content":1741},{"indent":7,"number":7,"align":120,"origin":120},[1742],{"type":800,"marks":1743,"text":1746},[1744],{"type":808,"attrs":1745},{"color":810,"name":811},"在 PyScript 为更多的人所接受之前,它有几个问题必须解决。例如,Web 页面的加载速度非常慢。如果你尝试跟随本教程运行代码,可能就会注意到,在 Web 页面的显示会有一个明显的滞后。",{"type":796,"attrs":1748,"content":1749},{"indent":7,"number":7,"align":120,"origin":120},[1750],{"type":800,"marks":1751,"text":812},[1752],{"type":808,"attrs":1753},{"color":810,"name":811},{"type":796,"attrs":1755,"content":1756},{"indent":7,"number":7,"align":120,"origin":120},[1757],{"type":800,"marks":1758,"text":1761},[1759],{"type":808,"attrs":1760},{"color":810,"name":811},"尽管如此,我还是觉得这个产品会继续发展,我的信心主要来自于它的开发者——给我们带来极好的 Anaconda 工具的 Anaconda 团队。",{"type":796,"attrs":1763},{"indent":7,"number":7,"align":120,"origin":120},{"type":796,"attrs":1765,"content":1766},{"indent":7,"number":7,"align":120,"origin":120},[1767],{"type":800,"marks":1768,"text":1774},[1769,1771],{"type":1770},"italic",{"type":808,"attrs":1772},{"color":1773,"name":811},"#333333","本文最初发布于Better Programming。",{"type":796,"attrs":1776},{"indent":7,"number":7,"align":120,"origin":120},{"type":796,"attrs":1778,"content":1779},{"indent":7,"number":7,"align":120,"origin":120},[1780,1785],{"type":800,"marks":1781,"text":1784},[1782],{"type":808,"attrs":1783},{"color":810,"name":811},"查看英文原文:",{"type":822,"attrs":1786,"content":1788},{"href":1787,"title":825,"type":120},"https://betterprogramming.pub/running-python-script-on-the-web-using-pyscript-the-next-big-thing-8ace9543d75",[1789],{"type":800,"text":1790},"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":786},"https://static-acl-001.geekbang.org/resource/article/95a26bcb608b3462ef1fdcaa10c962f7/content.json?auth_key=1790399811-a1e92bd333cc425ca4736e72f89c7180-0-3335583eb820b4fe357b9857fea5ffd4&v_t=1653037602070",[],{"ai_subtitle":6,"ai_subtitle_vtt":6,"subtitle_url":6,"show_subtitle":7,"manuscripts":120,"subtitles":120},[15,130,776],[772,131,777],[],[],[1801,1806,1812,1817,1824,1830,1836,1843,1848,1868,1901,1906,1911],{"id":1802,"pid":7,"name":1803,"url":706,"icon":6,"corner_mark":1804,"sort":15,"children":1805},1038,{"type":15,"text":707,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},[],{"id":1807,"pid":7,"name":1808,"url":709,"icon":6,"corner_mark":1809,"sort":770,"children":1811},1039,{"type":15,"text":710,"icon":6,"alt":6},{"type":770,"text":1810,"icon":6},"hot",[],{"id":1813,"pid":7,"name":1814,"url":712,"icon":6,"corner_mark":1815,"sort":311,"children":1816},1040,{"type":15,"text":713,"icon":6,"alt":6},{"type":770,"text":1810,"icon":6},[],{"id":1818,"pid":7,"name":1819,"url":1820,"icon":6,"corner_mark":1821,"sort":1822,"children":1823},1041,{"type":15,"text":716,"icon":6,"alt":6},"https://agicamp.com/?utm_source=infoqbar",{"type":770,"text":1810,"icon":6},4,[],{"id":1825,"pid":7,"name":1826,"url":725,"icon":6,"corner_mark":1827,"sort":1828,"children":1829},1045,{"type":15,"text":726,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},5,[],{"id":1831,"pid":7,"name":1832,"url":721,"icon":6,"corner_mark":1833,"sort":1834,"children":1835},1043,{"type":15,"text":265,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},6,[],{"id":1837,"pid":7,"name":1838,"url":449,"icon":6,"corner_mark":1839,"sort":1841,"children":1842},1053,{"type":15,"text":62,"icon":6,"alt":6},{"type":770,"text":1840,"icon":6},"new",7,[],{"id":1844,"pid":7,"name":1845,"url":728,"icon":6,"corner_mark":1846,"sort":176,"children":1847},1046,{"type":15,"text":729,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},[],{"id":1849,"pid":7,"name":1850,"url":6,"icon":6,"corner_mark":1852,"sort":994,"children":1853},1056,{"type":15,"text":1851,"icon":6,"alt":6},"企业专区",{"type":770,"text":1840,"icon":6},[1854,1861],{"id":1855,"pid":1849,"name":1856,"url":1858,"icon":6,"corner_mark":1859,"sort":15,"children":1860},1062,{"type":15,"text":1857,"icon":6,"alt":6},"arm专区","https://www.infoq.cn/zones/arm/",{"type":770,"text":1840,"icon":6},[],{"id":1862,"pid":1849,"name":1863,"url":1865,"icon":6,"corner_mark":1866,"sort":770,"children":1867},1057,{"type":15,"text":1864,"icon":6,"alt":6},"intel 专区","https://www.infoq.cn/zones/intel2025/",{"type":7,"text":6,"icon":6},[],{"id":1869,"pid":7,"name":1870,"url":543,"icon":6,"corner_mark":1871,"sort":1872,"children":1873},1044,{"type":15,"text":723,"icon":6,"alt":6},{"type":770,"text":1810,"icon":6},10,[1874,1880,1887,1894],{"id":1875,"pid":1869,"name":1876,"url":543,"icon":6,"corner_mark":1878,"sort":15,"children":1879},1049,{"type":15,"text":1877,"icon":6,"alt":6},"微众银行 · 深圳国际金融科技大赛",{"type":7,"text":6,"icon":6},[],{"id":1881,"pid":1869,"name":1882,"url":1884,"icon":6,"corner_mark":1885,"sort":770,"children":1886},1050,{"type":15,"text":1883,"icon":6,"alt":6},"亚马逊云科技 · 1000 AIdea 应用计划","https://www.infoq.cn/zones/1000aidea/#schedule",{"type":7,"text":6,"icon":6},[],{"id":1888,"pid":1869,"name":1889,"url":1891,"icon":6,"corner_mark":1892,"sort":311,"children":1893},1051,{"type":15,"text":1890,"icon":6,"alt":6},"微软 · AI 开发者挑战赛","https://www.infoq.cn/zones/microsoftai/",{"type":7,"text":6,"icon":6},[],{"id":1895,"pid":1869,"name":1896,"url":1898,"icon":6,"corner_mark":1899,"sort":1822,"children":1900},1052,{"type":15,"text":1897,"icon":6,"alt":6},"InfoQ · 大模型技术应用创新大赛","https://www.infoq.cn/zones/geekathon2023",{"type":7,"text":6,"icon":6},[],{"id":1902,"pid":7,"name":1903,"url":734,"icon":6,"corner_mark":1904,"sort":255,"children":1905},1048,{"type":15,"text":735,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},[],{"id":1907,"pid":7,"name":1908,"url":718,"icon":6,"corner_mark":1909,"sort":157,"children":1910},1042,{"type":15,"text":719,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},[],{"id":1912,"pid":7,"name":1913,"url":731,"icon":6,"corner_mark":1915,"sort":1916,"children":1917},1047,{"type":15,"text":1914,"icon":6,"alt":6},"AI工具",{"type":7,"text":6,"icon":6},13,[1918,1926,1934,1942],{"id":1919,"pid":1912,"name":1920,"url":1922,"icon":6,"corner_mark":1923,"sort":1924,"children":1925},1065,{"type":15,"text":1921,"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":1927,"pid":1912,"name":1928,"url":1930,"icon":6,"corner_mark":1931,"sort":1932,"children":1933},1066,{"type":15,"text":1929,"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":1935,"pid":1912,"name":1936,"url":1938,"icon":6,"corner_mark":1939,"sort":1940,"children":1941},1067,{"type":15,"text":1937,"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":1943,"pid":1912,"name":1944,"url":1946,"icon":6,"corner_mark":1947,"sort":1948,"children":1949},1068,{"type":15,"text":1945,"icon":6,"alt":6},"QClaw-Windows版","https://cdn.qclaw.qq.com/qclaw/win/0.1.13-5012-146/QClaw-Setup-0.1.13-5012-146.exe",{"type":7,"text":6,"icon":6},1776761649,[],["Reactive",1951],{"$sisMobile":786},["Set"],["ShallowReactive",1954],{"navConfig":-1,"headerMenuList":-1,"articleDetail":-1},"/article/MgtgoehSqE4Sa2dUqzAw",{"loginUser":1957,"main":1961},{"loginUser":1958,"userInfo":1960},["EmptyRef",1959],"null",["EmptyRef",1959],{"isMobile":1962,"isBottom":1964,"nowTime":1965,"isImmersion":1967,"messageCount":1968,"pageAction":1970,"showHeaderNotice":1971,"showHeaderFriendship":1972,"noticeLinePopup":1973,"isArticlePage":1974},["EmptyRef",1963],"false",["EmptyRef",1963],["Ref",1966],1790401581841,["EmptyRef",1963],["EmptyRef",1969],"0",["EmptyRef",1959],["EmptyRef",1963],["EmptyRef",1963],["EmptyRef",1963],["EmptyRef",1963]]</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:"d8f57bb8-257c-44f3-8153-5c4a6446358c",buildAssetsDir:"static/web/nuxt/www.infoq.cn",cdnURL:"https://static001.geekbang.org"}}</script></body></html>