Appearance
数据类型转换
在 Python 中,可以在不同数据类型之间进行转换,这称为类型转换或类型强制。
隐式类型转换
Python 会在某些情况下自动进行类型转换。
python
# 整数和浮点数运算
x = 10
y = 3.14
z = x + y
print(z) # 13.14
print(type(z)) # <class 'float'>
# 布尔值参与运算
a = True
b = 5
c = a + b
print(c) # 6
print(type(c)) # <class 'int'>显式类型转换
使用内置函数进行类型转换。
int() - 转换为整数
python
# 浮点数转整数(向下取整)
print(int(3.14)) # 3
print(int(3.99)) # 3
print(int(-3.14)) # -3
# 字符串转整数
print(int("42")) # 42
print(int("-10")) # -10
# 布尔值转整数
print(int(True)) # 1
print(int(False)) # 0
# 其他进制字符串转整数
print(int("1010", 2)) # 10 (二进制)
print(int("12", 8)) # 10 (八进制)
print(int("A", 16)) # 10 (十六进制)注意事项
python
# 无效的转换会抛出异常
# print(int("hello")) # ValueError
# print(int("3.14")) # ValueError
# 浮点数字符串需要先转为 float
print(int(float("3.14"))) # 3float() - 转换为浮点数
python
# 整数转浮点数
print(float(42)) # 42.0
print(float(-10)) # -10.0
# 字符串转浮点数
print(float("3.14")) # 3.14
print(float("-0.5")) # -0.5
print(float("2")) # 2.0
# 布尔值转浮点数
print(float(True)) # 1.0
print(float(False)) # 0.0
# 科学计数法
print(float("1.23e5")) # 123000.0str() - 转换为字符串
python
# 数字转字符串
print(str(42)) # "42"
print(str(3.14)) # "3.14"
print(str(-10)) # "-10"
# 布尔值转字符串
print(str(True)) # "True"
print(str(False)) # "False"
# None 转字符串
print(str(None)) # "None"
# 列表转字符串
print(str([1, 2, 3])) # "[1, 2, 3]"
# 字典转字符串
print(str({"a": 1})) # "{'a': 1}"bool() - 转换为布尔值
python
# 数字转布尔值
print(bool(0)) # False
print(bool(1)) # True
print(bool(-1)) # True
print(bool(0.0)) # False
print(bool(3.14)) # True
# 字符串转布尔值
print(bool("")) # False
print(bool("hello")) # True
print(bool(" ")) # True
# 容器类型转布尔值
print(bool([])) # False
print(bool([1, 2])) # True
print(bool(())) # False
print(bool((1, 2))) # True
print(bool({})) # False
print(bool({"a": 1})) # True
# None 转布尔值
print(bool(None)) # Falselist() - 转换为列表
python
# 字符串转列表
print(list("hello")) # ['h', 'e', 'l', 'l', 'o']
# 元组转列表
print(list((1, 2, 3))) # [1, 2, 3]
# 字典转列表(只转换键)
print(list({"a": 1, "b": 2})) # ['a', 'b']
# 集合转列表
print(list({1, 2, 3})) # [1, 2, 3]
# range 转列表
print(list(range(5))) # [0, 1, 2, 3, 4]tuple() - 转换为元组
python
# 列表转元组
print(tuple([1, 2, 3])) # (1, 2, 3)
# 字符串转元组
print(tuple("hello")) # ('h', 'e', 'l', 'l', 'o')
# 字典转元组(只转换键)
print(tuple({"a": 1, "b": 2})) # ('a', 'b')
# 集合转元组
print(tuple({1, 2, 3})) # (1, 2, 3)set() - 转换为集合
python
# 列表转集合(去重)
print(set([1, 2, 2, 3])) # {1, 2, 3}
# 字符串转集合
print(set("hello")) # {'h', 'e', 'l', 'o'}
# 元组转集合
print(set((1, 2, 2, 3))) # {1, 2, 3}
# 字典转集合(只转换键)
print(set({"a": 1, "b": 2})) # {'a', 'b'}dict() - 转换为字典
python
# 列表转字典
print(dict([("a", 1), ("b", 2)])) # {'a': 1, 'b': 2}
# 元组转字典
print(dict((("a", 1), ("b", 2)))) # {'a': 1, 'b': 2}
# 关键字参数
print(dict(a=1, b=2)) # {'a': 1, 'b': 2}complex() - 转换为复数
python
# 整数转复数
print(complex(3)) # (3+0j)
# 浮点数转复数
print(complex(3.14)) # (3.14+0j)
# 字符串转复数
print(complex("3+4j")) # (3+4j)
# 实部和虚部
print(complex(3, 4)) # (3+4j)chr() - 数字转字符
python
print(chr(65)) # 'A'
print(chr(97)) # 'a'
print(chr(20013)) # '中'ord() - 字符转数字
python
print(ord('A')) # 65
print(ord('a')) # 97
print(ord('中')) # 20013hex() - 转换为十六进制字符串
python
print(hex(255)) # '0xff'
print(hex(16)) # '0x10'
print(hex(-10)) # '-0xa'oct() - 转换为八进制字符串
python
print(oct(8)) # '0o10'
print(oct(64)) # '0o100'
print(oct(-10)) # '-0o12'bin() - 转换为二进制字符串
python
print(bin(10)) # '0b1010'
print(bin(255)) # '0b11111111'
print(bin(-5)) # '-0b101'类型转换示例
python
# 用户输入处理
age_str = input("请输入年龄: ")
age = int(age_str)
print(f"明年你将 {age + 1} 岁")
# 计算结果格式化
result = 10 / 3
print(f"结果是: {result:.2f}") # 保留两位小数
# 数据验证
def is_number(s):
try:
float(s)
return True
except ValueError:
return False
print(is_number("3.14")) # True
print(is_number("hello")) # False
# 列表去重
numbers = [1, 2, 2, 3, 3, 3, 4]
unique_numbers = list(set(numbers))
print(unique_numbers) # [1, 2, 3, 4]注意事项
- 类型兼容性:不是所有类型之间都可以相互转换
- 数据丢失:某些转换可能导致数据丢失(如 float 转 int)
- 异常处理:无效的转换会抛出异常,需要使用 try-except 处理
- 字符串格式:字符串转换为数字时,格式必须正确
总结
Python 提供了丰富的类型转换功能:
- 隐式转换:Python 自动进行的类型转换
- 显式转换:使用内置函数手动转换
- 常用函数:int()、float()、str()、bool()、list()、tuple()、set()、dict()
- 特殊函数:chr()、ord()、hex()、oct()、bin()
掌握类型转换是处理数据和编写健壮程序的重要技能。