【问题标题】:What is the relationship between Python built-in modules and built-in types/functions?Python内置模块和内置类型/函数之间有什么关系?
【发布时间】:2020-11-05 11:09:09
【问题描述】:

无需导入即可使用内置类型和函数,例如 'list, dict, print' 。

但是内置模块在使用前仍然需要导入,例如'time, sys, gc, math, mmap'。

所以它们只是不同的概念,或者内置模块包含内置类型/函数?

【问题讨论】:

  • 内置模块通常被称为“标准库”,这意味着它们包含在每个 python 安装中,但它们没有内置到 解释器中内置函数的方式。
  • @BallpointBen:不,标准库是一个不同的概念。某些标准库模块直接编译到 Python 解释器中,而不是从外部文件加载。这些是内置模块。你可以在sys.builtin_module_names找到他们的名字。
  • 大部分标准库不是内置的。
  • 我认为这不是 OP 所指的,因为例如,math 是一个标准库模块,但不在 sys.builtin_module_names 中。那就是说您是对的,标准库中的模块不是内置的;但我认为 OP 在调用这些内置模块时说错了。
  • @BallpointBen:那是因为您不在 Windows 上。在 Windows 上,math 是内置的。

标签: python built-in


【解决方案1】:

内置命名空间和内置模块之间没有任何关系。无需导入即可访问的东西就是这样,因为它被插入到一个特殊的内置命名空间中,可通过builtins module 获得,而built-in modules 是标准库模块的一个特殊子集,可以直接编译到 Python 解释器可执行文件中。它们是“内置”这个词的完全不相关的用法。

<built-in function whatever> 中的“内置”是另一个完全不相关的含义 - 当您谈论内置类型和函数无需导入即可使用时,这实际上是内置命名空间的属性,而函数显示<built-in function whatever> 只是表示它是用 C 编写的。

【讨论】:

  • 还有一个问题,builtins 模块也在sys.builtin_module_names 中列出,所以内置函数/类型也可以被认为是内置模块的一部分,对吧?
【解决方案2】:

【讨论】:

    【解决方案3】:

    那些其他模块不是内置的(好吧,反正大部分都是)。它们只是标准库的一部分,预计将在大多数安装中可用。 “内置”只是意味着您不必导入的所有内容 - 它们在所有模块命名空间中都可用。

    sys 这样的一些模块是用C 实现的,实际上可能是python 可执行文件的一部分。但是由于通常并不期望所有脚本都需要它们的实现,因此它们仍然是命名空间封装的。无需将sys.version 设为内置。

    【讨论】:

    • time、sys、gc、math和mmap都是Windows内置的。
    • @user2357112supportsMonica - 该术语以不同的方式使用。可以将任意数量的模块构建到可执行文件中。但是Built-In Functions 可用于所有模块,无需导入。它们没有被命名空间封装。 Python 最初是在类 unix 系统上开发的,直到今天,几乎所有的 C 扩展都在共享库中。 “内置”可能有点历史,因为在各种系统上构建的确切方法已经改变。
    猜你喜欢
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    相关资源
    最近更新 更多