11 Python 数据类型转换
前言
在 Python 编程中,数据类型决定了“这个数据能做什么”。例如,数字可以相加,字符串可以拼接。但如果你试图把“字符串”和“数字”相加,Python 就会直接报错。
为了让代码跑通,我们需要进行数据类型转换。
显式类型转换 (强制转换)
这是最常用的方式。作为程序员,你必须明确告诉 Python:“把这个数据变成那个类型”。通常使用 Python 的内置函数(类构造器)来实现。
1. 基础转换:数字与字符串互转
这是处理用户输入(input())和日志输出时必用的技巧。
int(x): 转为整数。float(x): 转为浮点数。str(x): 转为字符串。
# 场景 1:用户输入的通常是字符串,需要转数字计算
age_str = "18"
# print(age_str + 1) # ❌ 报错:不能把字符串和数字相加
age_num = int(age_str)
print(f"明年你就 {age_num + 1} 岁了") # ✅ 输出 19
# 场景 2:拼接日志时,必须把数字转字符串
score = 98.5
# print("成绩是: " + score) # ❌ 报错
print("成绩是: " + str(score)) # ✅ 输出 "成绩是: 98.5"
# 场景 3:小数点处理
pi = 3.14159
print(int(pi)) # ✅ 输出 3 (直接截断小数,不四舍五入)⚡️ 避坑指南:
字符串转整数时,内容必须“看着像整数”。
int("123")✅int("12.3")❌ (报错:ValueError)- 解决方法:先转 float 再转 int ->
int(float("12.3"))->12
2. 进阶转换:容器类型 (list, tuple, set)
这在数据处理中非常强大,常用于去重或修改不可变数据。
list(x): 转为列表(可修改)。tuple(x): 转为元组(不可修改,安全)。set(x): 转为集合(自动去重,无序)。
# 场景 1:利用 set 快速去重
ids = [101, 102, 101, 103, 102]
unique_ids = list(set(ids)) # 先转集合去重,再转回列表
print(unique_ids) # 输出 [101, 102, 103] (顺序可能变)
# 场景 2:修改元组(Tuple 是不可变的,必须先转 List)
data = (10, 20)
# data[0] = 99 # ❌ 报错
temp_list = list(data)
temp_list[0] = 99
data = tuple(temp_list)
print(data) # 输出 (99, 20)3. 逻辑转换:布尔值 (bool)
用于显式判断一个变量是否“有效”。
bool(x): 将 x 转为 True 或 False。
print(bool(0)) # False
print(bool("")) # False (空字符串)
print(bool([])) # False (空列表)
print(bool("Python")) # True
print(bool(1)) # True隐式类型转换 (自动转换)
Python 解释器在某些特定场景下,会自动帮你把一种类型转换成另一种,通常是为了保证运算不报错或逻辑通顺。
1. 场景一:整数与浮点数运算 (自动升格)
当整数 (int) 遇上浮点数 (float),结果会自动变成浮点数,以防止精度丢失。
a = 10 # int
b = 2.5 # float
result = a + b
print(result) # 输出 12.5
print(type(result)) # <class 'float'>2. 场景二:除法运算 (只要是除法,就是 float)
这是 Python 3 的特性。哪怕你能整除,单斜杠 / 的结果永远是浮点数。
x = 10
y = 2
res = x / y
print(res) # 输出 5.0 (注意有了小数点)
print(type(res)) # <class 'float'>
# 如果想要整数结果,必须用 // (地板除)
print(x // y) # 输出 53. 场景三:布尔值参与数学运算 (Bool 即 Int)
这是个冷知识:在 Python 中,True 等于 1,False 等于 0。它们可以直接参与加减乘除。
# 统计及格人数的骚操作
scores = [60, 55, 80, 45, 90]
# (s >= 60) 会生成一堆 True/False
# sum() 会自动把 True 当作 1 加起来
pass_count = sum(s >= 60 for s in scores)
print(f"及格人数: {pass_count}") # 输出 3
print(True + True) # 输出 24. 场景四:条件判断中的隐式转换 (Truthiness)
在 if 或 while 语句中,你不需要写 if len(mylist) > 0:,Python 会自动把非布尔值转换为布尔值进行判断。
- 被视为 False:
0,0.0,""(空串),[],{},None - 被视为 True: 其他所有值
username = ""
cart = ["Apple", "Banana"]
# 隐式转换:空字符串转为 False
if not username:
print("请输入用户名")
# 隐式转换:非空列表转为 True
if cart:
print(f"购物车里有 {len(cart)} 件商品")三、 特别注意:Python 绝对不会做的隐式转换
虽然 Python 会自动把 int 转 float,或者把 list 转 bool(在 if 中),但作为一门强类型语言,它严禁数字和字符串的隐式混合运算。这与 JavaScript 等弱类型语言不同。
# JavaScript 中: "5" + 5 = "55" (自动把数字变字符串拼接)
# Python 中:
x = "5"
y = 5
# print(x + y)
# 💥 崩溃:TypeError: can only concatenate str (not "int") to str结论:
- 同一个家族(数字家族 int/float/bool)之间,Python 会尝试帮你隐式转换。
- 跨家族(数字 vs 字符串)之间,必须由你进行显式转换。
总结速查表
| 转换方式 | 核心函数/场景 | 典型案例 | 备注 |
|---|---|---|---|
| 显式 (手动) | int(), float() | int("10") | 处理输入最常用 |
| 显式 (手动) | str() | str(10) | 拼接日志/打印 |
| 显式 (手动) | list(), set() | list((1,2)) | 修改数据、去重 |
| 隐式 (自动) | 数学运算 | 10 + 2.5 -> 12.5 | 低精度 -> 高精度 |
| 隐式 (自动) | 除法 / | 4 / 2 -> 2.0 | 结果必为 float |
| 隐式 (自动) | Bool 运算 | True + 1 -> 2 | True=1, False=0 |
| 隐式 (自动) | if 判断 | if [] -> False | 空值为假,非空为真 |
分类:
Python 新手教程
标签:
类型转换Python
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
暂无评论数据