我对“内置"”这个词感到困惑。功能。我认为这只意味着内置于解释器中的那些函数并记录在 -
2. Built-in Functions
但似乎标准库模块中定义的函数也是内置函数(在某些情况下)。例如 -
options.SignInScheme = "facebook2";
那么什么时候标准库模块中的函数称为内置函数?何时不是?
答案 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 constants和Built-in Types一起形成了您可以随时访问的标识符的内置命名空间。
此内置命名空间中的所有内容都不是内置函数或内置类型。值得注意的案例是在help
和quit/exit
等交互模式中使用的案例。
答案 3 :(得分:2)
嗯,根据这个定义,当一个函数表明它是内置的时,它就会内置;)
更严重的是:Python是一种语言(让我们称之为"合法"部分),CPython是Python语言的一种(而不是唯一的)实现(让我们来看看)称之为"技术"部分)。
从合法的POV,语言定义指出一个实现必须使一些函数(和类和对象)可用而不进行任何导入(IOW有"内置"语言本身)。这就是Python文档定义为" builtin"。
现在从技术POV来看,这并不妨碍实现具有一些其他功能/对象/类"技术上"内置(因为它们在技术上是运行时的一部分)但是作为stdlib模块或软件包之一的一部分暴露出来。