一、显式类型转换(强制转换)
使用内置函数主动转换数据类型:
# 1. 整型转换 int()
num_str = "123"
num_int = int(num_str) # 字符串 → 整型
print(num_int, type(num_int)) # 123 <class 'int'>
# 2. 浮点型转换 float()
pi_str = "3.14"
pi_float = float(pi_str) # 字符串 → 浮点型
print(pi_float, type(pi_float)) # 3.14 <class 'float'>
# 3. 字符串转换 str()
age = 25
age_str = str(age) # 整型 → 字符串
print(age_str, type(age_str)) # '25' <class 'str'>
# 4. 布尔型转换 bool()
print(bool(0)) # False (0为假)
print(bool(42)) # True (非0数为真)
print(bool("")) # False (空字符串为假)
print(bool("Hi")) # True (非空字符串为真)
二、隐式类型转换(自动转换)
Python 在运算中自动转换类型:
# 整型 + 浮点型 → 浮点型
result = 10 + 3.5 # 自动转为浮点型
print(result, type(result)) # 13.5 <class 'float'>
# 布尔型参与运算 → 整型
total = True + False + 10 # True=1, False=0
print(total) # 11 (1 + 0 + 10)
三、特殊类型转换
# 列表/元组转换
nums = [1, 2, 3]
print(tuple(nums)) # (1, 2, 3) 列表→元组
print(set(nums)) # {1, 2, 3} 列表→集合
# 字典转换
items = [('a', 1), ('b', 2)]
print(dict(items)) # {'a': 1, 'b': 2} 键值对→字典
四、转换注意事项与陷阱
字符串转数字的格式要求
# ✅ 合法转换
print(int("100")) # 100
print(float("3.14")) # 3.14
# ❌ 格式错误
# int("3.14") # ValueError (含小数点)
# int("100$") # ValueError (含非数字字符)
浮点转整型的截断问题
print(int(3.99)) # 3 (直接截断小数部分)
print(int(-2.9)) # -2 (向0方向截断)
容器转换的元素要求
# 字典转列表只保留键
d = {'a': 1, 'b': 2}
print(list(d)) # ['a', 'b'] (不是键值对)
# 字符串转列表会拆分为字符
print(list("Hi")) # ['H', 'i']
真假值转换规则
print(bool([])) # False (空列表为假)
print(bool([0])) # True (非空列表为真)
print(bool(None)) # False
print(bool("False")) # True (非空字符串)
精度丢失问题
# 大整数转浮点型可能丢失精度
big_num = 10**20
print(float(big_num)) # 1e+20 (精度仅15-16位小数)
五、安全转换技巧
异常处理转换
def safe_convert(value):
try:
return float(value)
except ValueError:
return 0.0
print(safe_convert("12.3")) # 12.3
print(safe_convert("abc")) # 0.0
带默认值的转换
import ast
# 安全字符串转列表
str_list = "[1, 2, 3]"
real_list = ast.literal_eval(str_list) # 安全转换
print(real_list, type(real_list)) # [1,2,3] <class 'list'>
实践建议
-
转换前用
type()
检查数据类型 -
字符串转数字时先使用
.isdigit()
验证 -
浮点转整型考虑使用
round()
四舍五入 -
复杂转换使用
ast.literal_eval()
替代eval()
(更安全) -
关注隐式转换可能带来的精度损失