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

时间:2018-04-10 14:47:40

标签: python python-3.x python-internals

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

options.SignInScheme = "facebook2";

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

4 个答案:

答案 0 :(得分:22)

这里有“内置”两种含义,虽然它们都是“翻译的一部分”。库引用使用它来指示函数在没有import的情况下可用(它不是“模块的一部分”,尽管见builtins)。解释器本身使用它来表示函数是在本地实现而不是在Python中实现(在CPython中,它至少名义上是implemented in C)。

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

答案 1 :(得分:4)

Luciano Ramalho 一书中,由O'Reilly出版的第一版第三版2016-03-18,它在第742页上读到: Fluent Python

  

术语[i。即“内置函数”通常仅指不需要导入的函数......但是sys,math,re等内置函数也包含内置函数。

总的来说,这个术语似乎使用不一致。但是出于所有实际目的,这应该没有意义。“

答案 2 :(得分:4)

根据the Reference manual,内置函数是:

  

内置功能

     

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

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

标准库的on Built-in functions部分讨论的是始终可用的内容。这与Built-in constantsBuilt-in Types一起形成了您可以随时访问的标识符的内置命名空间。

此内置命名空间中的所有内容都不是内置函数或内置类型。值得注意的案例是在helpquit/exit等交互模式中使用的案例。

答案 3 :(得分:2)

嗯,根据这个定义,当一个函数表明它是内置的时,它就会内置;)

更严重的是:Python是一种语言(让我们称之为"合法"部分),CPython是Python语言的一种(而不是唯一的)实现(让我们来看看)称之为"技术"部分)。

从合法的POV,语言定义指出一个实现必须使一些函数(和类和对象)可用而不进行任何导入(IOW有"内置"语言本身)。这就是Python文档定义为" builtin"。

现在从技术POV来看,这并不妨碍实现具有一些其他功能/对象/类"技术上"内置(因为它们在技术上是运行时的一部分)但是作为stdlib模块或软件包之一的一部分暴露出来。