Python 核心编程[第四章]
0x00 Python 对象
Python 使用对象模型来存储数据,构造任何类型的值都是一个对象。(万物皆对象)
所有的 Python 对象都拥有三个特征:身份、类型、值。
- 身份:每个 Python 对象都有一个唯一的身份标识自己,任何对象的身份可以使用 id() 来得到。
- 类型:类型决定了 Python 对象可以保存什么类型的值,可以进行什么操作,需要遵守什么规则。使用 type() 查看 Python 对象的类型。因为 Python 中"类型"也是对象,所以 type()返回的对象不是单纯的字符串。
- 值:对象表示的数据项。
上面三个特性在对象创建时就被赋值,除了值以外其他两个特征都是只读的。对于新式类型和类,对象的类型也是可以改变的。如果对象支持更新操作,那么它的值就可以改变,否则它的值也是可读的。只要一个对象还没有被销毁,这些特性就一直存在。
- 对象属性
某些 Python 对象有属性、值或相关联的可执行代码,比如方法,Python 用(.)标记法访问属性。属性包括响应对象的名字等,最常见的属性是函数和方法,不过有一些 Python 类型也有数据属性。含有数据属性的对象有:类、类实例、模块、复数和文件等。
0x01标准类型
基本数据类型
- 数字
- Integer 整型
- Boolean 布尔
- Long integer 长整型
- Floating point real number 浮点型
- Complex number 复数型
- String 字符串
- List 列表
- Tuple 元组
- Dictionary 字典
0x02其他内建类型
- 类型
- Null 对象(None)
- 文件
- 集合 / 固定集合
- 函数 / 方法
- 模块
- 类
1.类型对象和 type 类型对象
- 所有类型对象的类型都是 type ,它也是所有 Python 类型的根和所有 Python 标准类的默认元类。类就是类型,实例是对应类型的对象。
2.None Python 的 Null 对象
NoneType 类型只有一个值,那就是 None ,它不支持任何运算也没有任何内建方法,None 没有什么有用的属性,它的布尔值总是 False。
布尔值为 False 的对象 |
---|
None |
False |
所有的值为零的数 |
0 |
0.0 |
0L |
0.0+0.0j |
“” |
[] |
() |
{} |
除了上述其他任何对象的布尔值都是 True |
0x03内部类型
1.代码对象
2.帧对象
3.跟踪记录对象
4.切片对象
5.省略对象
6.XRange 对象
0x04标准类型操作符
1.对象值的比较
-
< > <= >= == !=
-
多个比较操作可以在同一行上进行
# 例: print(4 > 5 > 6)
2.对象身份比较
a is b <=> id(a) == id(b)
# 如果是同一个对象则返回 True
a is not b <=> id(a) != id(b)
# 如果不是一个对象则返回 False
在字符串(长度比较短的可以)和整型[-1,100] (这个返回会改变)会存在缓存机制,即两次将同一个值如 1 赋值给不同变量会造成 id 相同的假象,不过这个过程确实创建了新对象,如果这个值为 1.0 则同时赋值给两个变量不会出现这种情况。
3.布尔类型
- (and) (or) (not) <=> C (&&) (||) (!)
0x05标准类型内建函数
- repr:返回一个字符串,即将参数两边加引号后返回
- str:转换为字符串类型
- type:返回相应的 type 对象
-
0x06类型工厂函数
所有得内建类型现在也都是类,原来的内建转换函数 int()、type()、list() 等,现在都成了工厂函数。虽说它们像函数,实质上它们是类。当你调用它们时,实际上时生成了一个类型的实例。
- 工厂函数
- 之前是内建函数的工厂函数
- int()
- long()
- float()
- complex()
- str()
- unicode()
- basestring()
- list()
- tuple()
- type()
- 其他工厂函数
- dict()
- bool()
- set()
- frozenset()
- object()
- classmethod()
- staticmethod()
- super()
- property()
- file()
- 之前是内建函数的工厂函数
0x07标准类型的分类
“基本内建数据对象原始类型”
- 基本:指的是 Python 提供的核心或标准类型
- 内建:Python 默认提供类型
- 数据:存储数据的类型
- 对象:数据和存储的默认抽象
- 原始:提供最底层的粒度数据存储的类型
- 类型:数据类型的类型
通过三种不同模型理解基本类型的分类
1.存储模型(一种类型的分类方式)
-
通过查看这种类型能保存多少对象进行分类
-
原子 / 标量存储:能保存单个字面对象的类型
-
容器存储:可以容纳多个对象的类型(所有 Python 容器对象都能给容纳不同对象)
分类 Python 类型 标量 / 原子类型 数值(所有的数值类型),字符串(全部是文字) 容量类型 列表、元组、字典
2.更新模型
- 通过类型可不可以更新分类
分类 Python 类型 可变类型 列表、字典 不可变类型 数字、字符串、元组
3.访问模型
- 根据对存储数据的访问方式对数据类型进行分类
- 直接存取
- 顺序存取(序列类型)
- 映射存取
分类 Python 类型 直接访问 数字 顺序访问 字符串、列表、元组 映射访问 字典
0x08不支持的类型
1.char 或 byte
Python 没有 char 或 byte 类型来保存单一字符或 8 位整数,可以用长度为 1 的字符串表示字符或 8 位整数。
2.指针
Python 替你进行内存管理,因此没必要访问指针。在 Python 中你可以使用 id() 函数得到一个对象的身份,这是最接近指针的地址。
3.int vs short vs long
Python 的普通整形相当于标准整型类型,不需要类似 C 语言中的 int、short、long 这三种整型类型。Python 的整型实现等同于 C 语言的长整型,即便超出整型的表达范围,Python 也会自动返回一个长整型给你而不会报错。
4.float vs double
Python 的浮点类型实际上是 C 语言的双精度浮点类型。Python 认位支持两种浮点类型好处和开销不成正比,所以不支持单精度。Python 还有一种十进制浮点型类型 Decimal,不过你必须导入 decimal 模块才可以使用它,浮点型总是不精确的。Decimals则拥有任意的精度。