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

deb*_*ish 26 python python-3.x python-internals

我对"内置"功能一词感到困惑.我认为这只意味着内置于解释器中的那些函数并记录在其中 - 2.内置函数
但似乎标准库模块中定义的函数也是内置函数(在某些情况下).例如 -

>>> 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>
>>> 
Run Code Online (Sandbox Code Playgroud)

那么什么时候标准库模块中的函数称为内置函数,何时不是?

Dav*_*ing 22

这里有"内置"两种含义,尽管它们都是"解释器的一部分".库引用使用它来指示函数是否可用而没有import(它"不是模块的一部分",尽管参见builtins).解释器本身使用它来表示函数是本机实现而不是在Python中实现(在CPython中,它至少在名义上用C实现).

在C方面还有另一个含义:如果Python二进制文件包含它而不是在需要时加载它,则内置扩展模块(用C编写的扩展模块).

  • @ user2357112:"只有在它是CPython时,它才在C".不要忘记还有其他实现(在Java,dotnet甚至Python本身). (3认同)
  • @debashish:[它在C.](https://github.com/python/cpython/blob/v3.6.5/Python/_warnings.c#L828) (2认同)

小智 5

在O'Reilly 出版的Luciano Ramalho所著的《Fluent Python》一书中,第一版第三版 2016-03-18,它在第 742 页上写道:

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

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


Jim*_*ard 5

根据参考手册,内置函数是:

内置功能

内置函数对象是 C 函数的包装器。内置函数的例子是len()and math.sin()(math是一个标准的内置模块)。参数的数量和类型由 C 函数决定。特殊只读属性:__doc__是函数的文档字符串,或者None如果不可用;__name__是函数的名称;__self__设置为 None(但请参阅下一项);__module__是定义函数的模块的名称,如果不可用,则为 None 。

这是指 CPython,其他实现,例如 Jython 将使用 Java 而不是 C 来实现它们的内置函数。


本节在内置功能上的标准库在谈论的事情,始终可用。这与内置常量内置类型一起构成了您始终可以访问的标识符的内置命名空间。

并非这个内置命名空间中的所有内容都是内置函数或内置类型。值得注意的情况是在交互模式下使用的情况,例如helpquit/exit