Can Python';s标准库';在不导入的情况下,是否可以使用Python模块编写的?

Can Python';s标准库';在不导入的情况下,是否可以使用Python模块编写的?,python,Python,我在Python中使用模块时遇到了一些困难。我知道用C编写的内置模块类似于Python解释器的一部分,因此程序员可以随时使用它们,因为它们属于内置名称空间,因此不需要导入。这是否仅限于那些模块,意味着所有其他非内置的、用Python标准库编写的模块都需要导入才能使用 谢谢。TLDR:在使用之前,您必须导入每个模块,但以下模块除外 就Python而言,有两种不同的“内置”类型: 编译的内置对象,例如int或os.chmod 内置模块包含一组基本对象,如int和帮助 事物可以是1的一部分而不是2的

我在Python中使用模块时遇到了一些困难。我知道用C编写的内置模块类似于Python解释器的一部分,因此程序员可以随时使用它们,因为它们属于内置名称空间,因此不需要导入。这是否仅限于那些模块,意味着所有其他非内置的、用Python标准库编写的模块都需要导入才能使用


谢谢。

TLDR:在使用之前,您必须导入每个模块,但以下模块除外


就Python而言,有两种不同的“内置”类型:

  • 编译的内置对象,例如
    int
    os.chmod
  • 内置
    模块包含一组基本对象,如
    int
    帮助
  • 事物可以是1的一部分而不是2的一部分,反之亦然。例如,
    help
    是一个纯Python函数,
    os.chmod
    os
    模块的一部分。然而,出于实际原因,第2部分中的大部分内容也是第1部分的一部分:
    builtins
    被大量使用,编译对象通常具有更好的性能


    内置对象可以表示任何类型的模块、函数或对象。语言规范并没有真正定义哪些对象是内置的,哪些是内置的。细节因实现而异:例如,CPython使用已编译的C结构和函数,而PyPy使用已编译的对象

    根据经验,“Python代码未定义的所有内容”都是内置的。但是,这并不是严格正确的:内置对象可以访问解释器来创建常规Python对象。 所有内置函数都有一个共同点,即它们看起来像常规的Python对象,但它们的内部可以遵循任意规则

    请注意,内置接口不一定内置在解释器中。CPython提供了一个函数,PyPy通过来模拟它,允许解释器加载和使用它。 许多第三方库使用已编译的对象和函数来提供自定义内置项。但是,可以使用任何能够生成与C API兼容的共享库的语言


    是一个名为
    内置的实际模块
    。 此模块的所有名称在所有其他模块中始终可用: 只要在当前作用域、其包含作用域或当前模块中找不到名称,就会搜索内置的

    这与每个模块中都有来自内置导入*的
    类似,但不同:如果
    内置
    发生更改,则内置名称反映了这一点

    >>> int(5)
    5
    >>> import builtins
    >>> builtins.int = float
    >>> int(5)
    5.0
    
    例如,交互式Python会话中的
    \uuu
    是内置的
    的一部分。每当运行命令时,它都会更改

    免责声明:这只是为了演示。自己修改
    内置程序是一个非常非常糟糕的主意


    虽然只有
    内置的
    中的名称不需要导入,但Python通常在启动时导入几个模块

    $ python3 -c 'import sys;print(sys.modules.keys())'
    dict_keys(['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'sitecustomize', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg'])
    

    其中一些是解释器高级部分的一部分,例如
    sys
    importlib
    。允许准备您的环境-例如,更改交互式解释器的外观,在
    os.environment
    中设置搜索路径,等等。

    有,其余的是模块(所有模块都需要导入),但文档都将其作为模块引用;一些内置在解释器中并用C编写,另一些用python编写。谢谢。。我真的被这一切弄糊涂了:每个用C编写的模块都被认为是内置的吗?反之亦然,也就是说,每个内置代码都是用C编写的?根据经验,内置代码是“Python中未定义的所有内容”。用C编写的每个模块都是内置的,但不是每个内置的都是用C编写的,C模块可以定义常规的Python对象。CPYTHON接受任何符合C C API的共享对象(<代码> .S/<代码> /<代码> .dll <代码> > -编译它是从C、C++、FORTRAN、RISCODE代码或任何东西。那么用C编写的所有东西都不需要导入,对吗?不,内置的
    模块中的所有东西都不需要导入。这是一个名为
    内置的实际模块
    。。。因此,内置模块和内置模块中的定义之间存在差异;内置的不一定在内置模块中,除非它放在那里,否则它需要在使用之前导入..,对吗?