如何使用 Python 在线编译器
- 在编辑器中编写或粘贴代码。页面开始时会提供一个简短示例,随时点击重置示例即可恢复。
- 如果程序调用了
input(),请把答案填入输出下方的输入(stdin)框,每次input()调用对应一行。 - 点击运行或按 Ctrl + Enter(Mac 上为 ⌘ + Enter)。
- 在输出面板中查看结果。所有输出到
stderr的内容(包括回溯信息)都会以错误样式突出显示。 - 选择 5、15 或 60 秒的时间限制。如果脚本运行超时(例如不小心写了
while True:),会被自动终止。您也可以随时点击停止。
首次运行时会下载 Python 运行环境,大约 10 MB。浏览器会将其缓存,因此之后的运行启动快得多。用复制或 main.py 保存您的脚本。
您的代码绝不会离开您的设备。Python 在 Web Worker 中于您的浏览器内运行,不会向我们的服务器上传或存储任何内容。编辑器只会把您最后的代码保存在浏览器的本地存储中,不会存放在其他任何地方。
支持哪些功能
编译器通过 Pyodide 0.26 使用 Python 3.12,Pyodide 是编译成 WebAssembly 的 CPython 解释器。它是真正的 CPython,而不是模仿 Python 的替代品,所以语言的表现与在您电脑上完全一致。
- 标准库:
math、collections、itertools、datetime、json、re、dataclasses、statistics等。 - 自动加载包:当代码导入 Pyodide 提供的包(例如 NumPy 或 pandas)时,会即时下载。可用的纯 Python 包和科学计算包有很多。
- 标准输入:通过
input()和sys.stdin读取,数据来自 stdin 框。 async/await:代码通过runPythonAsync运行,因此可以在顶层使用await。
需要注意的限制:
- 不支持网络套接字。
socket、urllib.request和requests等模块在这里无法建立连接。 - 没有持久化文件。可以用
open()创建和读取文件,但文件只存在于内存中,重新加载页面或点击“停止”后就会丢失。 - 不显示图表。可以导入 matplotlib,但不会显示任何图形,请改为打印数字或表格。
- Pyodide 未提供的、含原生代码的包无法安装。
Python 速查
from dataclasses import dataclass
@dataclass
class Item:
name: str
price: float
cart = [Item("pen", 1.5), Item("book", 12.0)]
total = sum(i.price for i in cart)
print(f"{len(cart)} items, total {total:.2f}")
if total > 10 and cart:
print("Free shipping!")
| 任务 | 语法 |
|---|---|
| 打印格式化文本 | print(f"{x:.2f}") |
| 读取一行输入 | name = input("Name? ") |
| 把输入转换为数字 | n = int(input()) |
| 列表推导式 | [x * 2 for x in data if x > 0] |
| 遍历字典 | for k, v in d.items(): |
| 处理异常 | try: ... except ValueError as e: ... |
小技巧
- 如果程序请求输入的次数多于 stdin 框中的行数,Python 会抛出
EOFError。请为每次input()调用都准备一行。 - 像 pandas 这样的大型导入,首次需要几秒钟。下载时间计入时间限制,所以运行繁重的脚本时请选择 60 s。
- 每次运行都从全新的变量开始,但已导入的模块会保持加载状态,因此重复运行会很快。
- 输出的是 JSON?把它粘贴到 JSON格式化与校验工具中,进行美化和校验。
常见问题
这是真正的 Python 解释器吗?
是的。Pyodide 是编译成 WebAssembly 的 CPython 3.12。语法、内置函数和标准库都与桌面版 Python 一致。主要差异来自在浏览器中运行:没有网络访问,也没有永久的文件系统。
可以使用 NumPy 和 pandas 吗?
可以。像平常一样导入即可,首次运行代码时会自动下载。Pyodide 提供的许多其他科学计算包和纯 Python 包也以同样的方式加载。
如何给程序提供输入?
按程序请求的顺序,把值填入 stdin 框,每次 input() 调用一行。然后点击“运行”。
为什么脚本在 15 秒后停止?
默认的时间限制可防止死循环导致标签页卡死。如需进行更长时间的计算,请在时间限制菜单中选择 60 s。
还能运行其他语言吗?
可以。试试 JavaScript 在线编译器,或浏览全部免费的开发者工具。
更新于