一、数据类型的定义
在程序设计的类型系统中,数据类型(英语:Data type),又称资料型态、资料型别,是用来约束数据的解释。——Wikipedia
从定义我们可以看出来,数字类型的理解最主要的是约束数据的解释,每个类型都有他们自己所使用得场景,这个就是数字类型的分类,分类的结果可以方便我们更好的理解。
从官网可以看到,python所使用得数字类型有很多:
二、数据类型的分类
短时间内掌握所有的数字类型是不现实的,如果要学习我们可以先从数字类型的分类开始学习。
怎么理解呢?我们从日常生活中出发,我们首先会想到,生活中最常接触的是语言,语言做下分类就涉及到文字和数字,分别对应得是字符串和数字类型。
再进一步,我们为了更好的理解,字符串和数字类型就涉及到做区分,又分为有序和无序,有序的数据类型分为文本序列类型、序列类型、映射类型和二进制序列类型,无序的数据类型为集合类型。还有一种类型是既不属于有序类型,又不属于无序类型,我们给它加个名称叫特殊类型,主要有以下几种数字类型、布尔类型、空类型、函数类型、迭代器与生成器、省略类型、模块与类。
有序数据类型 | 无序数据类型 | 特殊数据类型 |
---|---|---|
字符串、序列类型、映射类型、二进制序列类型 | 集合类型 | 数字类型、布尔类型、空类型、函数类型、迭代器与生成器、省略类型、模块与类 |
str、list、tuple、range、dict、bytes, bytearray, memoryview | set、frozenset | int、float、complex、bool、NoneType、function、generator、ellipsis、module、class |
还涉及到很多未分类的数据类型,就又涉及到数据类型的再一次分类,我们这里暂时先不涉及,因为学习编程开发要循序渐进,先抓住重点,后面再进行了解和补充。
三、数据类型的比较
我们既然已经区分了有序数据类型、无序数据类型、特殊数据类型,那么我就需要进行比较,比较每个数据类型之间的差异。
1. 有序的数据类型
有序的数据类型是指其元素存储的顺序固定,并且能够通过索引或迭代保持这种顺序。
常见的有序数据类型
- list(列表):可变类型,元素按插入顺序存储,支持索引访问。
lst = [1, 2, 3]
print(lst[0]) # 输出 1
- tuple(元组):不可变类型,元素按插入顺序存储,支持索引访问。
tup = (1, 2, 3)
print(tup[0]) # 输出 1
- str(字符串):不可变类型,字符按插入顺序存储,支持索引访问。
s = "hello"
print(s[0]) # 输出 'h'
- dict(字典,Python 3.7+):插入顺序保留,支持键值对访问。
d = {"a": 1, "b": 2}
print(list(d.keys())) # 输出 ['a', 'b']
- range(范围对象):表示一系列连续整数,按顺序生成。
r = range(5)
print(list(r)) # 输出 [0, 1, 2, 3, 4]
- bytes(不可变二进制序列):不可变类型,按插入顺序存储,支持索引和切片操作。
b = b'hello'
print(b[0]) # 输出 104 (ASCII 'h')
print(b[1:3]) # 输出 b'el'
- bytearray(可变二进制序列):可变类型,按插入顺序存储,支持索引和切片操作。
ba = bytearray(b'hello')
ba[0] = ord('H') # 修改第一个字节
print(ba) # 输出 bytearray(b'Hello')
- memoryview(内存视图):提供对二进制数据的有序视图,支持索引和切片操作。
mv = memoryview(b'hello')
print(mv[0]) # 输出 104 (ASCII 'h')
print(mv[1:3].tobytes()) # 输出 b'el'
2. 无序的数据类型
无序的数据类型是指其内部存储顺序不固定,无法通过索引访问元素,顺序可能因操作而变化(如插入或删除元素)。
常见的无序数据类型
- set(集合):存储不重复元素,无特定顺序
s = {1, 2, 3}
print(s) # 输出可能是 {1, 2, 3},但顺序无法保证
frozenset(不可变集合):类似集合,但不可变。
fs = frozenset([1, 2, 3])
print(fs) # 输出 frozenset({1, 2, 3})
3.特殊的数据类型
既不属于有序,也不属于无序的类型大多是原子类型或特殊类型,它们不存储多个元素,无法体现顺序性。这些类型在 Python 中用于表示单个值、逻辑操作、或用于组织代码。
1. 数字类型
- int, float, complex
- 它们是单独的值,不是容器类型,因此不涉及顺序。
2. 布尔类型
- bool
- 它只包含 True 和 False 两个值,不涉及多个元素的排列。
3. 空类型
- NoneType
- 表示“无值”或“空”,只有一个值 None,无存储顺序。
4. 函数类型
- function
- 表示可执行的逻辑操作,而非数据的存储和排列。
5. 迭代器与生成器
- generator
- 按需生成数据,但生成后无法再次访问已生成的数据。
6. 省略类型
- ellipsis
- 仅有 … 一个值,常用于占位或省略操作。
7. 模块与类
- module, class
- 用于代码的组织和定义,不存储具体的数据元素。
4. 对比总结
数据类型 | 是否有序 | 可变性 | 备注 |
---|---|---|---|
str | 有序 | 不可变 | 存储字符序列 |
list | 有序 | 可变 | 常用序列类型 |
tuple | 有序 | 不可变 | 用于不可变类型 |
dict(python3.7+) | 有序 | 可变 | 保留插入顺序 |
range | 有序 | 不可变 | 按顺序生成整数 |
bytes | 有序 | 不可变 | 二进制不可变序列 |
bytearray | 有序 | 可变 | 二进制可变序列 |
memoryview | 有序 | 可变视图 | 对二进制数据的高效操作 |
set | 无序 | 可变 | 无重复元素,操作后顺序可能改变 |
frozenset | 无序 | 不可变 | 无重复元素,适合需要哈希的情况 |
int, float, complex | 不适用 | 不可变 | 单个值,不涉及顺序 |
bool | 不适用 | 不可变 | 单个值,不涉及顺序 |
NoneType | 不适用 | 不可变 | 表示“无值” |
function | 不适用 | 不可变 | 可执行的逻辑操作 |
generator | 不适用 | 不可变 | 按需生成数据,生成后不可重复迭代 |
ellipsis | 不适用 | 不可变 | 仅有一个值 … |
module | 不适用 | 可变 | 用于代码组织,存储代码的对象 |
class | 不适用 | 可变 | 用户定义类型,表示行为和状态 |
注意:
- Python 3.7+ 中的字典默认是有序的(按插入顺序存储)。
- 有序类型支持索引或可预测的迭代顺序,而无序类型通常只支持元素检查和集合操作,特殊类型表示单个值、逻辑操作、或用于组织代码。
四、总结
这一章内容,我们主要记住以下几点:
- 常用数据类型,分为有序类型、无序类型和特殊类型
- 有序数据类型包括:文本序列类型、序列类型、映射类型、二进制序列类型
- 无序数据类型包括:集合类型
- 特殊数据类型包括:数字类型、布尔类型、空类型、函数类型、迭代器与生成器、省略类型、模块与类
从这篇文章我们知道,数据类型是一个集合概念,每个集合概念还包括子集合概念,子集合概念再包括子概念,如果想了解每个数据类型的使用,我们首先应该认识到针对数据类型的定义、分类和比较是一切学习的前提条件,学习其他学科也一样,只有学会定义、分类、比较才可以深入理解一个概念或集合概念。
标签:顺序,python,分类,数据类型,无序,print,有序,类型 From: https://blog.csdn.net/gaolc888/article/details/143850859