简介¶
“Python 库”包含几种不同类型的组件。
它包含通常被认为是语言“核心”一部分的数据类型,例如数字和列表。对于这些类型,Python 语言核心定义了字面量的形式并对其语义设置了一些约束,但没有完全定义语义。(另一方面,语言核心确实定义了语法属性,例如运算符的拼写和优先级。)
该库还包含内置函数和异常 — 所有 Python 代码都可以使用的对象,无需使用 import
语句。其中一些由核心语言定义,但许多对于核心语义来说不是必需的,并且仅在此处进行描述。
然而,该库的大部分内容由模块集合组成。有很多方法可以剖析此集合。一些模块是用 C 语言编写并内置于 Python 解释器中的;其他模块是用 Python 编写的,并以源代码形式导入。一些模块提供了特定于 Python 的接口,例如打印堆栈跟踪;一些模块提供了特定于特定操作系统的接口,例如访问特定硬件;其他模块提供了特定于特定应用程序领域的接口,例如万维网。一些模块在 Python 的所有版本和端口中都可用;其他模块仅在底层系统支持或需要它们时才可用;还有一些模块仅在编译和安装 Python 时选择了特定的配置选项时才可用。
本手册的组织方式是“由内而外”:它首先描述内置函数、数据类型和异常,最后是模块,按相关模块分组。
这意味着,如果您从头开始阅读本手册,并在感到厌烦时跳到下一章,您将对 Python 库支持的可用模块和应用程序领域有一个合理的了解。当然,您不必像阅读小说一样阅读它 — 您也可以浏览目录(在手册前面),或者在索引(在后面)中查找特定的函数、模块或术语。最后,如果您喜欢学习随机主题,您可以选择一个随机页码(请参阅模块 random
)并阅读一两节。无论您阅读本手册各部分的顺序如何,从 内置函数 章节开始都是有帮助的,因为手册的其余部分假定您熟悉这些内容。
让我们开始吧!
可用性说明¶
“可用性:Unix”注释表示此函数通常在 Unix 系统上找到。它没有对它在特定操作系统上的存在做出任何声明。
如果没有单独说明,所有声称“可用性:Unix”的函数都在 macOS 上受支持,macOS 建立在 Unix 内核之上。
如果可用性注释同时包含最小内核版本和最小 libc 版本,则两个条件都必须满足。例如,注释为 *可用性:Linux >= 3.17 且 glibc >= 2.27* 的功能需要 Linux 3.17 或更高版本以及 glibc 2.27 或更高版本。
WebAssembly 平台¶
WebAssembly 平台 wasm32-emscripten
(Emscripten) 和 wasm32-wasi
(WASI) 提供了 POSIX API 的一个子集。WebAssembly 运行时和浏览器是沙盒化的,对主机和外部资源的访问权限有限。任何使用进程、线程、网络、信号或其他形式的进程间通信 (IPC) 的 Python 标准库模块都不可用,或者可能无法像在其他类 Unix 系统上那样工作。文件 I/O、文件系统和 Unix 权限相关的函数也受到限制。Emscripten 不允许阻塞 I/O。其他阻塞操作(如 sleep()
)会阻塞浏览器事件循环。
WebAssembly 平台上 Python 的属性和行为取决于 Emscripten-SDK 或 WASI-SDK 版本、WASM 运行时(浏览器、NodeJS、wasmtime)和 Python 构建时标志。WebAssembly、Emscripten 和 WASI 是不断发展的标准;将来可能会支持网络等功能。
对于浏览器中的 Python,用户应考虑使用 Pyodide 或 PyScript。PyScript 构建在 Pyodide 之上,而 Pyodide 本身构建在 CPython 和 Emscripten 之上。Pyodide 提供对浏览器 JavaScript 和 DOM API 的访问,以及通过 JavaScript 的 XMLHttpRequest
和 Fetch
API 实现的有限网络功能。
与进程相关的 API 不可用或始终因错误而失败。这包括生成新进程的 API(
fork()
、execve()
)、等待进程的 API(waitpid()
)、发送信号的 API(kill()
)或以其他方式与进程交互的 API。subprocess
可以导入,但不工作。socket
模块可用,但有限制,并且其行为与其他平台不同。在 Emscripten 上,套接字始终是非阻塞的,并且需要服务器上的额外 JavaScript 代码和帮助程序才能通过 WebSocket 代理 TCP;有关更多信息,请参阅 Emscripten 网络。WASI 快照预览版 1 仅允许来自现有文件描述符的套接字。有些函数是存根,它们要么不做任何事情,要么总是返回硬编码的值。
与文件描述符、文件权限、文件所有权和链接相关的函数是有限的,并且不支持某些操作。例如,WASI 不允许使用绝对文件名创建符号链接。