在开发过程中,我们需要对数据内置的类型进行转换,数据类型的转换,一般情况下你只需要将数据类型作为函数名即可。
Python 数据类型转换可以分为两种:
- 隐式类型转换 - 自动完成
- 显式类型转换 - 需要使用类型函数来转换 -在隐式类型转换中,Python 会自动将一种数据类型转换为另一种数据类型,不需要我们去干预。 转换规则:
- 较低数据类型(整数)就会转换为较高数据类型(浮点数)以避免数据丢失。
数值类型相加
以下实例中:
py
num_init = 123
num_flo = 1.23
num_new = num_init + num_flo
print("num_init 数据类型为:",type(num_init)) # num_init 数据类型为: <class 'int'>
print("num_flo 数据类型为:",type(num_flo)) # num_init 数据类型为: <class 'float'>
print("num_new 值为:",num_new) # num_new 值为: 123.23
print("num_new 数据类型为:",type(num_new)) # num_new 数据类型为: <class 'float'>
代码解析:
- 实例中我们对两个不同数据类型的变量
num_int和num_flo进行相加运算,并存储在变量num_new中。 - 然后查看三个变量的数据类型。
- 在输出结果中,我们看到
num_int是整型(integer),num_flo是浮点型(float)。 - 同样,新的变量
num_new是浮点型(float),这是因为 Python 会将较小的数据类型转换为较大的数据类型,以避免数据丢失。
整型数据与字符串类型的数据进行相加
py
num_init = 123
num_str = "1.23"
print("num_init 数据类型为:",type(num_init)) # num_init 数据类型为: <class 'int'>
print("num_str 数据类型为:",type(num_str)) # num_str 数据类型为: <class 'str'>
print("num_new 值为:",num_init + num_str)
# File "c:\Users\13538\Desktop\Kimi_Agent_政务大屏可视化\py\0306.py", line 94, in <module>
# print("num_new 值为:",num_init + num_str) # num_new 值为: 124.23
# ~~~~~~~~~^~~~~~~~~
# TypeError: unsupported operand type(s) for +: 'int' and 'str'
从输出中可以看出,整型和字符串类型运算结果会报错,输出 TypeError。 Python 在这种情况下无法使用隐式转换。
如果想要正常计算,Python 为这些类型的情况提供了一种解决方案,称为显式转换。
显式类型转换 在显式类型转换中,用户将对象的数据类型转换为所需的数据类型。 我们使用 int()、float()、str() 等预定义函数来执行显式类型转换。
int() 强制转换为整型:
py
x = int(1) # x 输出结果为 1
y = int(2.8) # y 输出结果为 2
z = int("3") # z 输出结果为 3
float() 强制转换为浮点型:
py
x = float(1) # x 输出结果为 1.0
y = float(2.8) # y 输出结果为 2.8
z = float("3") # z 输出结果为 3.0
w = float("4.2") # w 输出结果为 4.2
str() 强制转换为字符串类型:
py
x = str("s1") # x 输出结果为 's1'
y = str(2) # y 输出结果为 '2'
z = str(3.0) # z 输出结果为 '3.0'
整型和字符串类型进行运算,就可以用强制类型转换来完成:
py
num_int = 123
num_str = "456"
print("num_int 数据类型为:",type(num_int))
print("类型转换前,num_str 数据类型为:",type(num_str))
num_str = int(num_str) # 强制转换为整型
print("类型转换后,num_str 数据类型为:",type(num_str))
num_sum = num_int + num_str
print("num_int 与 num_str 相加结果为:",num_sum)
print("sum 数据类型为:",type(num_sum))
输出结果为:
python
num_int 数据类型为: <class 'int'>
类型转换前,num_str 数据类型为: <class 'str'>
类型转换后,num_str 数据类型为: <class 'int'>
num_int 与 num_str 相加结果为: 579
sum 数据类型为: <class 'int'>
以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。
| 函数 函数 | 核心作用 | 详细用法场景 | 使用局限 / 注意事项 | |
|---|---|---|---|---|
int(x [,base]) |
将 x 转换为一个整数 | 1. 字符串转十进制整数(如用户输入的数字字符串 "123" 转可计算的整数);2. 浮点数截断小数(如 int(9.9) 取整为 9);3. 进制转换(如 int("1010",2) 转二进制为十进制);4. 布尔值转整数(int(True) → 1,用于计数)。 |
1. 非数字字符串(如 "abc")、带小数点的字符串(如 "123.45")转换报错;2. 浮点数转换是 "截断" 而非四舍五入;3. base 参数仅对字符串有效,数字指定 base 会报错;4. 超出整数范围(Python 无严格限制,但极端值会占用大量内存)。 |
|
float(x) |
将 x 转换为一个浮点数 | 1. 整数转浮点数(如 float(123) → 123.0,适配小数运算);2. 数字字符串转浮点数(如用户输入的 "3.14" 转可计算的浮点数);3. 科学计数法字符串转换(如 float("1.23e5") → 123000.0)。 |
1. 非数字字符串(如 "xyz")转换报错;2. 浮点数存在精度问题(如 0.1+0.2≠0.3);3. 超大 / 超小数值可能转为 inf(无穷大)或 nan(非数字)。 |
|
complex(real [,imag]) |
创建一个复数 | 1. 科学计算(如电路分析、傅里叶变换);2. 数学方程求解(如二次方程判别式小于 0 时的根);3. 自定义复数(如 complex(3,4) → 3+4j)。 |
1. 日常业务开发极少用到;2. 实部 / 虚部最终均为浮点型,无法保留整数类型;3. 复数运算仅支持基础代数运算,高级操作需依赖 cmath 库。 |
|
str(x) |
将对象 x 转换为字符串 | 1. 数据展示(如 str(123) 转字符串用于界面输出);2. 拼接不同类型数据(如 "年龄:"+str(18));3. 自定义对象转字符串(重写 __str__ 方法定制格式)。 |
1. 转换结果是 "易读形式",不可直接执行(如 str(123) → "123",无引号);2. 部分对象(如函数、类)转换结果为内存地址,无实际业务意义。 |
|
repr(x) |
将对象 x 转换为表达式字符串 | 1. 代码调试(如 repr("abc") → "'abc'",带引号可直接复制执行);2. 记录对象原始信息(如日志中保存变量的精确值);3. 自定义对象调试(重写 __repr__ 方法)。 |
1. 结果适合开发者查看,不适合展示给普通用户;2. 部分对象的 repr 结果和 str 一致(如整数、浮点数)。 |
|
eval(str) |
计算字符串中的有效 Python 表达式,并返回结果对象 | 1. 动态执行简单表达式(如 eval("1+2*3") → 7);2. 解析配置文件中的简单表达式(如配置文件存 "3.14*r*r",动态计算圆面积);3. 把字符串格式的列表 / 字典(如 "[1,2,3]")转回原类型。 |
1. 极高安全风险:执行未知来源的字符串(如用户输入的 "os.system('rm -rf /')")会导致系统被攻击;2. 仅能执行表达式,无法执行语句(如 eval("if 1>0: print(1)") 报错);3. 性能低于直接编写代码,大量使用会降低程序效率。 |
|
tuple(s) |
将序列 s 转换为一个元组 | 1. 数据不可变保护(如把列表转元组,防止意外修改);2. 作为字典的 key(列表不可作为 key,元组可);3. 函数多返回值(本质是元组,如 a,b = (1,2));4. 解包操作(如 *tuple([1,2,3]) 展开序列)。 |
1. 元组不可变,无法增删改元素(如需修改需转列表);2. 转换非序列对象(如 tuple(123))报错,需先转为可迭代对象;3. 空序列转换为空元组 (),无实际数据意义。 |
|
list(s) |
将序列 s 转换为一个列表 | 1. 增删改查数据(如把元组 / 字符串转列表,添加元素);2. 字符串拆分为字符列表(如 list("abc") → ['a','b','c']);3. 迭代器 / 生成器转列表(如 list(range(5)) → [0,1,2,3,4]);4. 集合转列表(解决集合无序、不可索引的问题)。 |
1. 列表可变,占用内存比元组略多;2. 非可迭代对象(如 list(None))转换报错;3. 字典转列表仅获取 key(如 list({"a":1}) → ['a']),需用 items() 取键值对。 |
|
set(s) |
将序列 s 转换为可变集合 | 1. 数据去重(如 set([1,2,2,3]) → {1,2,3});2. 集合运算(如求交集 set1&set2、并集 `set1 |
set2、差集 set1-set2);<br>3. 快速判断元素是否存在(x in set比x in list` 效率高)。 |
1. 集合无序,不支持索引 / 切片(如 set([1,2])[0] 报错);2. 元素必须是不可变类型(列表、字典不能作为集合元素);3. 重复元素会被自动删除,需确认业务是否允许去重。 |
dict(d) |
创建一个字典 | 1. 键值对数据存储(如用户信息 {"name":"张三","age":18});2. 元组序列转字典(如 dict([("a",1),("b",2)]));3. 快速映射查询(如通过 key 取 value,比列表遍历效率高)。 |
1. key 必须是不可变类型(字符串、数字、元组),列表 / 集合不能作为 key;2. d 非 (key,value) 元组序列时报错(如 dict([1,2,3]) 报错);3. 重复 key 会被覆盖(如 dict([("a",1),("a",2)]) → {"a":2})。 |
|
frozenset(s) |
将序列 s 转换为不可变集合 | 1. 作为字典的 key(普通 set 不可,frozenset 可);2. 作为集合的元素(普通 set 不能包含另一个 set,但可包含 frozenset);3. 数据不可变保护(防止集合被意外修改)。 | 1. 不可增删元素,如需修改需先转为普通 set;2. 不支持索引 / 切片,仅支持集合运算;3. 日常开发使用频率远低于普通 set。 | |
chr(x) |
将一个整数转换为对应的字符 | 1. 生成指定 Unicode 字符(如 chr(65) → "A",chr(20013) → "中");2. 字符批量生成(如循环生成字母 / 数字);3. 编码转换(整数编码转可视化字符)。 |
1. x 必须是有效的 Unicode 编码值(0-0x10FFFF),超出范围报错;2. 仅能转换单个字符,多字符需循环;3. 部分编码对应不可见字符(如 chr(0) 为空字符)。 |
|
ord(x) |
将一个字符转换为对应的 Unicode 整数值 | 1. 字符转编码(如 ord("A") → 65,用于字符排序、比对);2. 验证字符类型(如判断 ord(x) 是否在字母 / 数字编码区间);3. 自定义字符映射规则。 |
1. x 必须是单个字符(如 ord("ab") 报错);2. 非字符类型(如数字、列表)转换报错;3. 不同编码(如 GBK)的字符,Unicode 值不代表原编码值。 |
|
hex(x) |
将一个整数转换为十六进制字符串 | 1. 进制转换(如编程中的内存地址、颜色值表示);2. 硬件 / 网络开发(如十六进制协议解析);3. 数据压缩展示(十六进制比十进制更简短)。 | 1. 仅支持整数转换,浮点数 / 字符串转换报错;2. 结果以 0x 开头(如 hex(255) → "0xff"),如需去掉前缀需切片(hex(255)[2:]);3. 负数转换结果带负号(如 hex(-10) → "-0xa")。 |
|
oct(x) |
将一个整数转换为八进制字符串 | 1. 进制转换(如文件权限、底层编程中的八进制表示);2. 传统系统数据解析(部分老旧系统用八进制存储数据)。 | 1. 仅支持整数转换,非整数报错;2. 结果以 0o 开头(如 oct(8) → "0o10"),需手动去除前缀;3. 日常开发使用频率极低,仅特定场景(如 Linux 权限配置)有用。 |
总结
-
用法场景核心:
- 基础类型转换(int/float/str/repr):适配用户输入处理、数据计算、展示调试;
- 序列 / 集合转换(list/tuple/set/dict):适配数据存储、去重、查询、不可变保护;
- 编码 / 进制转换(chr/ord/hex/oct):适配字符处理、底层 / 科学计算;
- 特殊转换(complex/eval/frozenset):适配专业场景(科学计算、动态执行、数据保护)。
-
使用局限关键:
- 类型匹配:非目标类型(如非数字字符串转 int)大概率报错;
- 不可变 / 可变:元组 /frozenset 不可改,列表 /set/dict 可改,需按业务选择;
- 安全 / 性能:eval 有安全风险,浮点数有精度问题,集合 / 字典查询效率高于列表。