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