Python中的内置对象(builtins)

每次启动Python解释器时,内置模块都会自动加载,无论是作为顶层执行环境还是作为交互式会话。在此模块中定义了Object类,该类恰好是所有Python对象的基类。在此模块中定义了所有内置数据类型类,例如数字,字符串,列表等。还定义了BaseException类以及所有内置的异常。此外,所有内置功能也在内置模块中定义。

由于此模块是在当前会话中自动导入的,因此通常不会显式导入。默认情况下,可执行代码中使用的所有内置函数都被视为来自内置模块。例如

>>> len('hello')
5

隐式等于

>>> import builtins
>>> builtins.len('hello')
5

但是,当还存在一个与内置函数同名的用户定义函数时,需要显式导入此模块。Python解释器为用户定义函数赋予更高的优先级。因此,如果代码既包含用户定义的名称,又包含相同名称的内置函数,则后者必须以内置模块作为前缀。

def len(string):
print ('local len() function')
print ('calling len() function in builtins module')
import builtins
l = builtins.len(string)
print ('length:',l)
string = "Hello World"
len(string)

输出结果

local len() function
calling len() function in builtins module
length: 11

大多数模块的名称__builtins__作为其全局变量的一部分提供。__builtins__的值通常是此模块或此模块的__dict__属性的值。

>>> import math
>>> globals(){'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'math': <module 'math' (built-in)>}