Python 实现内置函数的位置

Python 实现内置函数的位置,python,python-internals,Python,Python Internals,我试着四处看看,但找不到关于这个话题的任何清晰的东西 内置函数是否在每次启动Python时自动导入的模块中实现?在这种情况下,哪个是模块 还是内置函数只是Python解释器中的嵌入函数?因为,内置函数(大部分)是在Python解释器中实现的 例外情况主要是类型;像str和dict和list这样的东西在目录中都有自己的C文件;这些被列为一个列表 从技术上讲,实现将其视为一个单独的模块对象,但在当前全局命名空间不包含名称时会自动搜索该对象。因此,当您在代码中使用abs(),并且全局命名空间中没有ab

我试着四处看看,但找不到关于这个话题的任何清晰的东西

内置函数是否在每次启动Python时自动导入的模块中实现?在这种情况下,哪个是模块

还是内置函数只是Python解释器中的嵌入函数?

因为,内置函数(大部分)是在Python解释器中实现的

例外情况主要是类型;像
str
dict
list
这样的东西在目录中都有自己的C文件;这些被列为一个列表

从技术上讲,实现将其视为一个单独的模块对象,但在当前全局命名空间不包含名称时会自动搜索该对象。因此,当您在代码中使用
abs()
,并且全局命名空间中没有
abs
对象时,内置模块也会搜索该名称


它还作为(或在Python3中)公开,因此您可以访问内置名称,即使您在代码中隐藏了任何名称。然而,与
sys
模块一样,它被编译成Python二进制文件,不能作为单独的动态加载文件使用。

因此可以说它们被嵌入到Python解释器中,不是吗?@antox注意到有一个
内置的
模块(在python3中。
\uuuuuuuuuuu内置的
在python2中)。此模块由
bltinmodule.c
文件定义。因此,从技术上讲,它们是外部模块的一部分,但是该模块与其他模块的处理方式不同,因为如果找不到全局模块,则会对其进行搜索。在执行重述时,内置函数在bltinmodule.c文件中实现,因此在编译python解释器时,它们就成为该模块的一部分。但是出于上述原因,这些内置函数在内置模块(python3)中也可用(作为额外的)。好吗?@antox:Sorta,有点,是的。Python作为二进制文件的一部分,有一个名为
\uuu builtin\uuu
builtins
的模块对象,这取决于Python版本,如果在全局文件中找不到,则用于满足名称查找。您的代码可以导入该模块对象以直接在其上查找名称。