Python 基础详解:数据类型(Data Types)—— 程序的“数据基石”
一、引言:为什么数据类型如此重要?
在 Python 编程中,数据类型决定了:
- 数据的存储方式
- 可以对数据执行的操作
- 数据的取值范围
- 不同类型之间的运算规则
理解数据类型是编写正确、高效程序的基础。Python 是动态类型语言,虽然你不需要显式声明类型,但必须清楚每个变量的类型及其行为。
二、Python 内置核心数据类型概览
Python 提供了丰富的内置数据类型,主要分为以下几类:
类别 | 数据类型 | 说明 |
数字类型 |
| 数值计算 |
文本类型 |
| 字符串处理 |
布尔类型 |
| 逻辑判断 |
序列类型 |
| 有序数据集合 |
映射类型 |
| 键值对存储 |
集合类型 |
| 无序唯一元素集合 |
二进制类型 |
| 二进制数据处理 |
💡 本文将重点讲解最常用的核心类型。
三、数字类型(Numeric Types)
1. 整数(int)
表示整数值,没有大小限制(仅受内存限制)。
age = 25
temperature = -10
big_number = 123456789012345678901234567890
常用操作:
a = 10
b = 3print(a + b) # 13 加法
print(a - b) # 7 减法
print(a * b) # 30 乘法
print(a / b) # 3.333... 除法(结果为 float)
print(a // b) # 3 整除
print(a % b) # 1 取余
print(a ** b) # 1000 幂运算
⚠️ 注意:/
运算符总是返回浮点数,即使结果是整数(如 4 / 2
返回 2.0
)。
2. 浮点数(float)
表示带小数点的数字,遵循 IEEE 754 标准。
price = 19.99
pi = 3.1415926535
scientific = 1.5e-4 # 科学计数法,等于 0.00015
浮点数精度问题:
print(0.1 + 0.2) # 输出:0.30000000000000004
print(0.1 + 0.2 == 0.3) # False!
✅ 解决方案:使用 decimal
模块进行高精度计算(如金融计算):
from decimal import Decimal
print(Decimal('0.1') + Decimal('0.2') == Decimal('0.3')) # True
3. 复数(complex)(了解即可)
用于数学和工程计算,形式为 a + bj
。
z = 3 + 4j
print(z.real) # 3.0
print(z.imag) # 4.0
四、文本类型:字符串(str)
字符串是字符的序列,用单引号、双引号或三引号包围。
name = "Alice"
message = 'Hello, World!'
multi_line = """这是一个
多行字符串"""
字符串的常用操作
1. 字符串拼接
first = "Hello"
last = "World"
full = first + " " + last # "Hello World"
✅ 推荐使用 f-string(Python 3.6+):
name = "Alice"
age = 25
print(f"我是{name},今年{age}岁。")
2. 字符串索引与切片
text = "Python"print(text[0]) # 'P' 第一个字符
print(text[-1]) # 'n' 最后一个字符
print(text[1:4]) # 'yth' 切片 [start:end)
print(text[:3]) # 'Pyt' 从开头到索引3(不含)
print(text[3:]) # 'hon' 从索引3到结尾
3. 常用字符串方法
方法 | 说明 | 示例 |
| 转大写 |
→ |
| 转小写 |
→ |
| 去除首尾空白 |
→ |
| 替换 |
→ |
| 分割 |
→ |
| 连接 |
→ |
| 查找位置 |
→ |
| 是否以某字符串开头 |
→ |
email = " Alice@EXAMPLE.COM "
clean_email = email.strip().lower()
print(clean_email) # "alice@example.com"
五、布尔类型(bool)
布尔值只有两个:True
和 False
,用于逻辑判断。
is_student = True
has_permission = False
布尔值的来源:
- 比较运算的结果
- 条件判断的结果
- 任何对象都可以被“真值测试”
print(5 > 3) # True
print(10 == 10) # True
print("hello" != "") # True# 真值测试(Truthiness)
print(bool(1)) # True
print(bool(0)) # False
print(bool("abc")) # True
print(bool("")) # False
print(bool([1, 2])) # True
print(bool([])) # False
✅ 规则:空值(0
, ""
, []
, {}
, None
)为 False
,其他为 True
。
六、序列类型
1. 列表(list)—— 有序、可变
列表是最常用的数据结构,可以存储不同类型的数据。
fruits = ["苹果", "香蕉", "橙子"]
numbers = [1, 2, 3, 4, 5]
mixed = ["Alice", 25, True, 3.14]
列表的常用操作:
# 访问元素
print(fruits[0]) # "苹果"
print(fruits[-1]) # "橙子"# 修改元素
fruits[1] = "葡萄"# 添加元素
fruits.append("草莓") # 末尾添加
fruits.insert(1, "芒果") # 在索引1处插入# 删除元素
fruits.remove("苹果") # 删除指定值
del fruits[0] # 删除索引0的元素
popped = fruits.pop() # 弹出并返回末尾元素# 列表长度
print(len(fruits))# 列表切片(同字符串)
print(numbers[1:4]) # [2, 3, 4]# 遍历列表
for fruit in fruits:print(fruit)
列表推导式(List Comprehension)
一种简洁创建列表的方式:
# 普通方式
squares = []
for x in range(1, 6):squares.append(x**2)# 推导式方式(推荐)
squares = [x**2 for x in range(1, 6)]
print(squares) # [1, 4, 9, 16, 25]# 带条件的推导式
evens = [x for x in range(10) if x % 2 == 0]
2. 元组(tuple)—— 有序、不可变
元组与列表相似,但创建后不能修改。
coordinates = (10, 20)
person = ("张三", 25, "北京")
single_item = (42,) # 单个元素的元组,必须加逗号
元组的特点:
- 更安全:防止意外修改
- 性能略高:占用内存更少
- 可作为字典的键(列表不行)
# 访问元素(同列表)
print(person[0]) # "张三"# 不可修改
# person[0] = "李四" # TypeError!
3. range 对象
表示一个不可变的数字序列,常用于 for
循环。
r1 = range(5) # 0, 1, 2, 3, 4
r2 = range(1, 6) # 1, 2, 3, 4, 5
r3 = range(0, 10, 2) # 0, 2, 4, 6, 8 (步长为2)for i in range(3):print(i) # 0, 1, 2
💡 range
不是列表,但可以转换:
list(range(5)) # [0, 1, 2, 3, 4]
七、映射类型:字典(dict)
字典是键值对(key-value)的集合,类似于现实生活中的“字典”。
student = {"name": "王五","age": 22,"city": "上海","grades": [85, 90, 78]
}
字典的常用操作:
# 访问值
print(student["name"]) # "王五"
print(student.get("age")) # 22
print(student.get("phone", "未知")) # 安全访问,键不存在时返回默认值# 修改/添加值
student["age"] = 23 # 修改
student["major"] = "计算机" # 添加新键值对# 删除键值对
del student["city"]
popped = student.pop("grades") # 弹出并返回值# 遍历字典
for key in student:print(f"{key}: {student[key]}")# 推荐的遍历方式
for key, value in student.items():print(f"{key}: {value}")# 获取所有键、值、键值对
print(student.keys()) # dict_keys(['name', 'age', 'major'])
print(student.values()) # dict_values(['王五', 23, '计算机'])
print(student.items()) # dict_items([('name', '王五'), ...])
字典推导式
# 创建平方数字典
squares_dict = {x: x**2 for x in range(1, 6)}
print(squares_dict) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
八、集合类型
1. 集合(set)—— 无序、唯一
集合存储不重复的元素,且无序。
unique_numbers = {1, 2, 3, 3, 4}
print(unique_numbers) # {1, 2, 3, 4} 重复的3被自动去除
集合的常用操作:
set1 = {1, 2, 3}
set2 = {3, 4, 5}# 并集
print(set1 | set2) # {1, 2, 3, 4, 5}
print(set1.union(set2))# 交集
print(set1 & set2) # {3}
print(set1.intersection(set2))# 差集
print(set1 - set2) # {1, 2}
print(set1.difference(set2))# 对称差集
print(set1 ^ set2) # {1, 2, 4, 5}# 添加/删除
set1.add(4)
set1.remove(1) # 元素必须存在
set1.discard(10) # 元素不存在也不会报错
2. 冻结集合(frozenset)
不可变的集合,可以作为字典的键。
fset = frozenset([1, 2, 3])
# fset.add(4) # AttributeError!
九、类型转换(Type Casting)
Python 允许在不同类型之间转换。
函数 | 说明 | 示例 |
int(x) | 将参数转换为整数类型 | int("123") → 123 |
float(x) | 将参数转换为浮点数类型 | float("3.14") → 3.14 |
str(x) | 将参数转换为字符串类型 | str(100) → "100" |
bool(x) | 将参数转换为布尔值类型 | bool(1) → True |
list(x) | 将参数转换为列表类型 | list("abc") → ['a', 'b', 'c'] |
tuple(x) | 将参数转换为元组类型 | tuple([1, 2]) → (1, 2) |
set(x) | 将参数转换为集合类型,去除重复元素 | set([1, 2, 2]) → {1, 2} |
dict(x) | 将一系列键值对转换为字典类型 | 需要提供键值对序列 |
请注意,对于`dict(x)`函数的具体示例,通常需要给出一个由键值对组成的可迭代对象作为输入。例如,可以使用列表中的元组来创建字典:dict([("key1", "value1"), ("key2", "value2")])将会得到{"key1": "value1", "key2": "value2"}这样的结果。
# 示例:用户输入通常是字符串,需要转换
age_str = input("请输入年龄:") # "25"
age_int = int(age_str)
print(age_int + 5) # 30
⚠️ 转换失败会抛出异常:
int("abc") # ValueError!
十、总结:Python 数据类型核心要点
类型 | 可变性 | 有序性 | 唯一性 | 典型用途 |
| ❌ | ❌ | ❌ | 数值计算 |
| ❌ | ✅ | ❌ | 文本处理 |
| ❌ | ❌ | ❌ | 逻辑判断 |
| ✅ | ✅ | ❌ | 存储有序数据列表 |
| ❌ | ✅ | ❌ | 存储不可变数据序列 |
| ✅ | ✅(Python 3.7+) | 键唯一 | 存储键值对映射 |
| ✅ | ❌ | ✅ | 存储唯一元素集合 |
学习建议:
- 熟练掌握
int
,float
,str
,bool
,list
,dict
—— 这是最常用的五种类型。 - 理解可变与不可变的区别:
list
可变,tuple
不可变。 - 善用推导式:让代码更简洁高效。
- 注意类型转换:特别是用户输入和文件读取时。
📌 动手练习:
- 创建一个包含你个人信息的字典(姓名、年龄、城市等)。
- 创建一个列表,存储你喜欢的电影,并用
for
循环打印。 - 使用
set
找出两个列表的共同元素。
# 示例练习
my_info = {"name": "你的名字", "age": 20, "hobbies": ["阅读", "编程"]}
print(f"我叫{my_info['name']},爱好是{', '.join(my_info['hobbies'])}。")