内置模块、标准模块和冻结模块之间的区别?

Lor*_*sum 5 python python-3.x

Python 模块、内置模块、标准模块和冻结模块有什么区别?


这些术语来自官方文档本身。

加载器文档中提到了Python 模块内置模块

装载机必须满足以下要求:

  • 如果模块是 Python 模块(而不是内置模块或动态加载的扩展),加载器应该在模块的全局命名空间 (module.__dict__) 中执行模块的代码。

顶级组件文档中引用了标准模块

所有内置和标准模块均可用

Frozen 模块自己的导入器,描述为

冻结模块的进口商

尽管在官方文档和核心代码中有提及,但在词汇表索引BFMPS)或(显然)中没有对 Python 模块、内置模块、标准模块或冻结模块的明确定义别处。


定义:内置模块

这是我可以为内置模块提出的最佳定义:

内置模块是一种扩展模块,其在所列出的(即用C语言编写,Java和.NET等)sys.builtin_module_names属性。请注意,此列表可能因 Python 解释器而异(即 Cython 的内置模块可能不是 IronPython 的内置模块等)。

我从以下来源拼凑了这个定义:

标准库文档指出,

该库包含内置模块(用 C 编写)

importlib.machinery.BuiltinImporter文档的状态,

所有已知的内置模块都列在sys.builtin_module_names.

sys.builtin_module_names反过来状态属性的文件,

编译到此 Python 解释器中的所有模块的名称。(此信息无法通过任何其他方式获得)


定义:冻结模块*

Python2.7imp文档指出,

一个冷冻模块是用Python编写的,其编译的字节码对象被纳入由Python的冻结公用事业定制的Python解释器的模块。

值得注意的是,Python3 文档中不存在此定义。这种遗漏是否是疏忽尚不清楚。Python3 文档中仍然引用了冻结模块。


我没有找到帮助定义 Python 模块或标准模块的资源。

* 感谢@martineau 的参考

Sur*_*u R 0

我会尽量用简单的语言来解释,以便于人们容易理解。模块只不过是包含函数集合的 python 文件(扩展名为 .py)。(不仅仅是函数,有时是类和函数)。任何人都可以创建模块。例如,想象一下您正在单个 python 文件中创建 4 个函数,即加、减、乘和除,并且您将 python 文件命名为算术(如下所示)

# arithmetic.py
def add(a,b): return a+b
def subtract(a,b): return a-b
def multiply(a,b): return a*b
def divide(a,b): return a/b
Run Code Online (Sandbox Code Playgroud)

现在文件名算术就是你的模块名称。现在让我们考虑一下您是否在同一目录中创建另一个 python 文件,即“add.py” 。如果这个Python文件需要执行加法运算,那么你可以从算术模块中导入add函数,如下所示:

#add.py
from arithmetic import add
r = add(5, 6)
print(r) # output 11
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以创建任意数量的模块,并且可以在后面的代码行中导入和调用该函数。这简化了过程。

在 pypi.org 中,可以轻松获得全球许多程序员发布的模块(或库)。根据需要,我们可以导入并使用这些模块。任何人都可以发布他们的模块,您必须遵循上述网站中给出的过程。

内置模块是 Python 标准库的一部分。就是python包自带的,导入就可以直接使用。您不需要安装这些模块例如,像 math、random、re 等模块,要在代码中使用这些模块,您应该提及 import math / import random / import re 等,但这些不是必需的待安装。

外部模块是可以添加的附加第三方模块。如果您想使用这些模块,则需要使用以下代码将它们与 python 包分开安装。

pip3 install <module-name>
Run Code Online (Sandbox Code Playgroud)

让我们考虑另一种环境,比如 Arduino 等微控制器。现在微控制器内部的编程可以使用Python 来完成。(他们称之为 micropython)。但微控制器是非常小的芯片,我们应该考虑内存的使用。为了减少内存使用,执行了一个称为冻结的过程。通过冻结过程,代码被编译成单个文件并直接存储二进制格式。经历这种冻结过程的模块称为冻结模块。

希望这有帮助。