1.内置模块builins
Python内置模块/内建类型:直接嵌入在Python语言核心(Python内核)中的基础数据类型和基础功能,这些类型不需要任何额外的模块导入就可以直接使用。
-
即为
builtins
模块,详见于builtins.py
文件。当启动Python解释器时,builtins
模块就会被自动导入。 -
自定义模块:自己写的每个
.py
文件在Python中都被视为一个模块。例如,写了一个名为my_module.py
的文件,则应使用import my_module
来导入该模块从而访问其中定义的所有公共变量、函数、类等。而buitins模块不需要导入。 -
builtins.py
文件包含了内置模块的类、函数、常量的定义,但它本身并不是这些内建类型的真正实现。实际上,builtins.py
主要提供的是对这些内建对象的"视图"或"接口",而它们的真正实现,大多数是在CPython解释器的C代码。
这些内建类型大致可以分为以下几类:
-
数值类型:如
int
、float
、complex
。 -
序列类型:如
list
、tuple
、range
、str
、bytes
、bytearray
。 -
集合类型:如
set
、frozenset
。 -
映射类型:如
dict
。 -
文件类型:如内建的
open
函数返回的文件对象。 -
布尔类型:
bool
。 -
其他类型:例如
NoneType
(None
的类型)、ellipsis
、NotImplemented
。 -
函数和类:例如内建的
function
、lambda
、classmethod
、staticmethod
等。 -
模块类型。
-
异常类型:所有的内建异常。
-
除此之外,
builtins
模块还包含了很多内建的函数(如print
、len
、open
等)、常量(如True
、False
、None
)以及其他实用的功能。
builtins
模块和内建类型紧密相关,它提供了直接访问这些类型和功能的途径,但它们的真正实现大多数都是在解释器的底层,用C语言编写的。
2.Python的协议与接口
Python有协议机制而无接口机制。
-
协议(protocol):
-
在Python中,协议是一种非正式的接口,它没有明确的声明。它是一组特定的方法和属性的约定。
-
对象满足某个协议意味着该对象实现了该协议要求的方法和属性,但并不需要明确地声明它实现了该协议。
-
例如,Python中的迭代器协议要求对象实现
__iter__()
和__next__()
方法。任何对象只要实现了这两个方法,它就满足迭代器协议,可以在for
循环中使用。
-
-
接口:
-
在许多其他编程语言中,接口是一种正式的结构,用于明确地定义一个类必须实现的方法和属性,但不提供具体实现。
-
Python没有内置的接口机制,但协议起到了类似的作用。协议更加灵活,符合鸭子类型——“如果它像鸭子,叫声像鸭子,那它就是鸭子。”
-
这体现了在Python中,我们更关心对象的行为(它实现了哪些方法)而不是它的实际类型。
例如,你不需要显式地声明一个类为迭代器。只需实现__iter__()
和__next__()
方法,它就自然而然地满足了迭代器协议。
-