Python 标准库鲜为人知的部分

在本文中,我们将探讨一些鲜为人知但有趣且有用的内容 Python 标准库的角落。

Python 字典和列表是许多应用程序的基础,但是 对于更高级的数据组织来说可能太简单了。为了提供更多 用于在内存中存储数据的强大容器 Python 提供了一个 collection 模块包含以下内容:

  • Deque - 类似列表的数据结构,用于高效插入和删除项目 从任一端。
  • Counter - 字典的子类来计数。
  • ChainMap - 元字典提供统一的键值映射 多个字典,无需复制数据。
  • 数据映射的高级结构:
  • OrderedDict - 维护键值对顺序的字典(例如,当 HTTP 标头值对于处理某些安全机制很重要)。
  • namedtuple - 一个工厂函数,用于创建名为的元组子类 字段。对于更多的 OOP 方法来说,比仅仅使用更方便 dict。
  • defaultdict - 预先填充了部分或全部值的字典。可以 当您想要为可能缺失的字段提供值时会很方便 在被抓取的网页中。
  • UserDict, UserList 和 UserString - 包装纸 dict, list 和 str 用于进一步子类化。

API 参考: https://docs.python.org/3/library/collections.html


Python 有 with 关键字创建将自动清理的上下文管理器 词汇范围内的事物。例如,您不必担心关闭 自己创建一个文件,如果你像这样打开它:

with open("results.txt", "w") as out_f:
    out_f.write("...\n")
    ...

contextlib 模块提供帮助程序来使用代码中的上下文管理器。 例如,您可以使用 @contextmanager 注解转自己的函数 可以通过以下方式使用 with 句法。

API参考: https://docs.python.org/3/library/contextlib.html


由于浮点数如何表示的技术现实, 浮点计算可能会产生一些奇怪的结果:

>>> 0.1 + 0.1 + 0.1 - 0.3
5.551115123125783e-17
>>> 1.2 + 2.2
3.4000000000000004

这在数学上是不正确的,并且对于某些应用程序来说是一个破坏者,例如 就像那些与金钱打交道的人一样。为了解决这个问题,Python 推出了 decimal 允许我们使用运算符将​​十进制数表示为 Python 对象的模块 超载。调整计算以便我们得到正确的结果 (在可配置的精度水平内):

>>> from decimal import *
>>> one_point_two = Decimal('1.2')
>>> one_point_two
Decimal('1.2')
>>> two_point_two = Decimal('2.2')
>>> two_point_two
Decimal('2.2')
>>> one_point_two + two_point_two
Decimal('3.4')

API参考: https://docs.python.org/3/library/decimal.html


同样,我们在处理分数时也会遇到问题 - 三分之一是 不完全等于 0.333……Python 附带 fractions 模块来表示 它们作为具有运算符重载的 Python 对象:

>>> import fractions
>>> one_third = fractions.Fraction(numerator=1, denominator=3)
>>> 2 * one_third
Fraction(2, 3)

API 参考: https://docs.python.org/3/library/fractions.html


Python解释器是作为 栈机 实现的 内部。当您运行一些 Python 代码时,它会被编译为特定于 Python 的代码 Python VM 执行的字节码。用于调试或性能优化 出于某种目的,可能需要将 Python 字节码反汇编为指令。 标准 Python 安装附带 dis 采用 Python 的模块 代码单元(例如函数)并将代码分解为一种 伪汇编器:

>>> import dis
>>> def add(a, b):
...     return a+b
... 
>>> dis.dis(add)
  1           0 RESUME                   0
  2           2 LOAD_FAST                0 (a)
              4 LOAD_FAST                1 (b)
              6 BINARY_OP                0 (+)
             10 RETURN_VALUE

API参考: https://docs.python.org/3/library/dis.html


Python statistics 模块提供了一个统计算法的小工具包 对于相对简单的应用程序,使用 Pandas 或 Numpy:标准差、数值数据的几种平均值、线性 回归、相关、正态分布等。对于渴望的人们 加入 AI/ML 革命,它提供朴素贝叶斯分类器 - 一种算法 这可以被认为是机器学习的最小可行示例。

API参考: https://docs.python.org/3/library/statistics.html


有时您可能想从 Python 代码中打开 Web 浏览器。自从Python 是可移植的多平台语言,这可能会有点麻烦,因为 平台和设置之间的差异。为了使这更容易,Python 提供了一个 webbrowser 具有简单 API 的模块使浏览器显示页面。例如, 我们可以打电话 open_new() 带有 URL 的函数:

>>> import webbrowser
>>> webbrowser.open_new('https://trickster.dev')
True

如果您想打开本地文件(例如包含某些结果的 HTML 报告) 自动化),您需要将文件 URL 传递给以下函数之一:

>>> import os
>>> file_url = 'file://' + os.path.realpath('test.html')
>>> webbrowser.open(file_url)
True

API参考: https://docs.python.org/3/library/webbrowser.html


如果存在以下情况,以源代码形式分发 Python 程序可能会出现问题: 接收端的一些非技术用户。即使他们安装了Python 可能存在缺少依赖项、版本冲突和其他运行时问题。 为了让这个 Python 飞船不那么可怕 zipapp 带有 CLI 工具和 Python 的模块 用于将 Python 代码打包到单个文件包中的 API。这提供了一个有趣的 使用虚拟环境和 PyInstaller 等解决方案之间的中点 将应用程序编译为特定于平台的形式 - 代码仍然可移植,但是 必须有 Python 解释器才能运行它。

API参考: https://docs.python.org/3/library/zipapp.html

© GVGNN 2013-2026