Python3 数据类型转换
为什么要转换
用户输入、文件读取得到的数据大多是字符串,参与数学运算前需转成数字;反过来,要把结果拼进文本时又需要转回字符串,这就是类型转换的常见场景。
基础类型转换
int() 转整数、float() 转浮点、str() 转字符串、bool() 转布尔:
print(int("42")) # 输出:42,字符串 → 整数
print(float(3)) # 输出:3.0,整数 → 浮点
print(str(3.14)) # 输出:3.14,数字 → 字符串
print(bool(1), bool(0)) # 输出:True False,非 0 即为真
print(int(3.99)) # 输出:3,浮点转整数直接截断小数
容器类型转换
list()、tuple()、set()、dict() 可在容器之间互转:
t = (1, 2, 2)
print(list(t)) # 输出:[1, 2, 2],元组 → 列表
print(set(t)) # 输出:{1, 2},转集合顺便去重
print(tuple([1, 2])) # 输出:(1, 2),列表 → 元组
print(dict([("a", 1), ("b", 2)])) # 输出:{'a': 1, 'b': 2}
字符串与数字互转陷阱
数字转字符串永远成功;但并非所有字符串都能转数字,转不了会抛 ValueError:
print(int(" 8 ")) # 输出:8,字符串两端空白会被忽略
print(int("3.5")) # 报错:ValueError,整数转换不接受小数点
print(float("3.5")) # 输出:3.5,带小数必须用 float()
print(int("abc")) # 报错:ValueError: invalid literal
转换前用字符串方法做安全判断是常见做法:
s = "123"
if s.isdigit():
print(int(s) * 2) # 输出:246
else:
print("不是纯数字")
进制与字符转换
bin()/oct()/hex() 输出 2、8、16 进制字符串;ord()/chr() 在字符与 Unicode 编号之间互相转换:
print(bin(10), oct(10), hex(255))
# 输出:0b1010 0o12 0xff
print(int("ff", 16)) # 输出:255,int() 第二参数指定进制
print(ord("A"), ord("中")) # 输出:65 20013
print(chr(65), chr(20013)) # 输出:A 中
隐式转换
混合运算时 Python 会自动把"窄类型"提升为"宽类型",顺序为 bool → int → float → complex:
print(1 + 2.0) # 输出:3.0,int 自动变为 float
print(True + 1) # 输出:2,bool 自动变为 int
用 int()/float()/str()/list() 等构造函数做显式转换;记住"字符串转数字可能失败、需先 isdigit() 判断",并理解隐式转换的自动提升方向,即可应对绝大多数转换场景。