Python 标准库模块中的函数何时称为内置函数?

Python 标准库模块中的函数何时称为内置函数?,python,python-3.x,python-internals,Python,Python 3.x,Python Internals,我对术语“内置”功能感到困惑。我认为这意味着只有那些内置在解释器中并记录在- 但在标准库模块中定义的函数似乎也是内置函数(在某些情况下)。比如说- >>> import os >>> os.chdir <built-in function chdir> >>> import warnings >>> warnings.warn <built-in function warn> >>>

我对术语“内置”功能感到困惑。我认为这意味着只有那些内置在解释器中并记录在-
但在标准库模块中定义的函数似乎也是内置函数(在某些情况下)。比如说-

>>> import os
>>> os.chdir
<built-in function chdir>
>>> import warnings
>>> warnings.warn
<built-in function warn>
>>> import json
>>> json.dumps
<function dumps at 0x7f3643a240d0> # not built-in
>>> dir
<built-in function dir>
>>> 
导入操作系统 >>>os.chdir >>>进口警告 >>>警告,警告 >>>导入json >>>json.dumps #非内置 >>>迪尔 >>>
那么,什么时候标准库模块中的函数称为内置函数,什么时候不是

这里的“内置”有两种含义,尽管它们都表示“解释器的一部分”。库参考使用它来表示函数不需要导入即可使用(它“不是模块的一部分”,但请参见)。解释器本身使用它来表示函数是本机实现的,而不是用Python实现的(在CPython中,至少名义上是这样)


C端还有另一种含义:如果Python二进制文件合并了扩展模块(即,用C编写的扩展模块),而不是在需要时加载扩展模块,则扩展模块是内置的。

从这个定义来看,如果函数说它是内置的,那么它就是内置的;)

更严肃地说:Python是一种语言(让我们称之为“法律”部分),CPython是Python语言的一个(而不是唯一)实现(让我们称之为“技术”部分)

从法律角度来看,语言定义指出,实现必须使某些函数(以及类和对象)在没有任何导入的情况下可用(在语言本身中有“内置的”)。这就是Python文档定义的“内置”

现在从技术角度来看,这并不妨碍实现“技术上”内置一些其他函数/对象/类(因为它们在技术上是运行时的一部分),但作为stdlib模块或包的一部分公开

在O'Reilly出版的Luciano Ramalho的《流畅的Python》一书第一版第三版2016-03-18中,第742页写道:

术语[即“内置函数”]通常仅指不需要导入的函数。。。但像sys、math、re等内置模块也包含内置函数


总的来说,这个术语的使用似乎不一致。但就所有实际目的而言,这应该没有任何意义。”

一个内置函数,根据is:

内置功能

内置函数对象是C函数的包装器。内置函数的示例有
len()
math.sin()
math
是标准内置模块)。参数的数量和类型由C函数确定。特殊的只读属性:
\uuuuuu doc\uuuuu
是函数的文档字符串,如果不可用,则为
None
\uuu name\uuuuuu
是函数的名称;
\uuuu self\uuu
设置为无(但请参见下一项);
\uuuuu模块\uuuuu
是在其中定义函数的模块的名称,如果不可用,则为“无”

这涉及到CPython,其他实现,例如Jython,将使用Java而不是C来实现其内置


标准库的这一部分讨论的是始终可用的东西。这与您可以始终访问的内置标识符命名空间一起构成


并非此内置命名空间中的所有内容都是内置函数或内置类型。值得注意的是那些在交互模式下使用的函数,如and。

在我看来,内置函数是解释器的一部分,但与文档相反(“该库还包含内置函数和异常—所有Python代码都可以使用这些对象,而无需导入语句。“,)它们可以放在库中。您的意思是说内置函数是C语言的吗?但是,例如,
warnings。warn
是Python语言的内置函数。@debashish:@user2357112:“只有当它是CPython时,它才是C语言的。别忘了还有其他的实现(在Java、dotnet甚至Python本身中)。当我导入警告时,
warnings.py
文件被加载。它有一个名为
warn
的纯Python函数。如何调用C函数而不是Python函数?好的,我得到了。在
warnings.py
文件中有一个
from\u warnings import…