目录
数据类型转换分为 隐式类型转换 和 显式类型转换:
1. 隐式类型转换(自动转换)
Python 自动在不同类型的运算中转换数据类型,通常是向上转型(转换到更复杂的数据类型)。
示例:
a = 5 # int
b = 3.14 # float
c = a + b # c 是 float(自动转换)
print(type(c)) # <class 'float'>
规则:
int
→float
:在算术运算中,整型自动转为浮点型。- 不能隐式转换的类型会报错:
num = 123 s = "456" print(num + s) # TypeError: 无法隐式将字符串转为数字
2. 显式类型转换(强制转换)
通过内置函数明确转换数据类型:
函数 | 说明 | 示例 |
---|---|---|
int(x) | 转为整型。参数可以是浮点数、字符串(数字格式)或布尔值。 | int("42") → 42 |
float(x) | 转为浮点数。参数可以是整数、字符串(数字格式)或布尔值。 | float("3.14") → 3.14 |
str(x) | 转为字符串。适用于所有数据类型。 | str(123) → "123" |
complex(real, imag) | 创建复数,imag 默认为 0。参数为整型或浮点型。 | complex(3) → (3+0j) |
bool(x) | 转为布尔型。非零值和非空容器转为 True ,零和空容器转为 False 。 | bool(0) → False |
list(s) | 将序列(如字符串、元组)转为列表。 | list("abc") → ['a', 'b', 'c'] |
tuple(s) | 将序列(列表、**)转为元组。 | tuple([1, 2]) → (1, 2) |
set(s) | 将序列转为**(自动去重)。 | set([1, 1, 2]) → {1, 2} |
dict(seq) | 将键值对序列(列表的元组或嵌套列表)转为字典。 | dict([('a',1), ('b', 2)]) → {'a':1, 'b':2} |
ord(c) | 返回字符的 Unicode/ASCII 码。参数为单个字符。 | ord('A') → 65 |
chr(x) | 返回 Unicode/ASCII 码对应的字符。参数为整数。 | chr(65) → 'A' |
hex(x) | 将整数转为十六进制字符串。 | hex(255) → '0xff' |
oct(x) | 将整数转为八进制字符串。 | oct(64) → '0o100' |
eval(s) | 将字符串作为 Python 表达式解析并执行,返回结果。注意安全性风险。 | eval("5 + 3") → 8 |
显式转换示例
字符串与数值的转换
num_str = "123"
num = int(num_str) # 转为整数
flo_str = "3.14"
flo = float(flo_str) # 转为浮点数
age = 25
msg = "年龄:" + str(age) # 必须显式转为字符串才能拼接
容器类型转换
s = "abc"
lst = list(s) # ['a', 'b', 'c'] (转为列表)
t = tuple(lst) # ('a', 'b', 'c') (转为元组)
s_set = set(lst) # {'a', 'b', 'c'} (转为**)
错误处理
当转换不合法时,会抛出异常:
try:
x = int("abc") # ValueError: 无效的整数格式
except ValueError:
print("转换失败")
注意事项
-
字符串转数字:
- 只能转换纯数字格式的字符串,否则报错。
int("123") # 合法 int("123.45") # 非法(需先用 float()) float("3.14") # 合法
-
布尔值转换:
bool(0)
→False
,bool(1)
→True
- 空容器(
[]
,{}
,""
)均转为False
。
-
eval()
的安全风险:- 避免直接执行用户输入的字符串,可能导致代码注入攻击:
input_str = "__import__('os').system('rm -rf /')" # 危险操作! eval(input_str) # 切勿尝试!
- 避免直接执行用户输入的字符串,可能导致代码注入攻击:
-
复数转换:
complex
可接受不同格式输入:complex(3) # 3+0j complex("3+4j") # 3+4j (字符串直接转复数)
总结
- 隐式转换:适用于数值运算中的自动类型提升(如
int
转float
)。 - 显式转换:需借助内置函数,转换不合法时抛出
ValueError
或TypeError
。 - 谨慎使用
eval()
:仅用于可信输入,避免潜在安全漏洞。