Skip to content

数据类型转换

在 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")))  # 3

float() - 转换为浮点数

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.0

str() - 转换为字符串

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))     # False

list() - 转换为列表

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('中'))  # 20013

hex() - 转换为十六进制字符串

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]

注意事项

  1. 类型兼容性:不是所有类型之间都可以相互转换
  2. 数据丢失:某些转换可能导致数据丢失(如 float 转 int)
  3. 异常处理:无效的转换会抛出异常,需要使用 try-except 处理
  4. 字符串格式:字符串转换为数字时,格式必须正确

总结

Python 提供了丰富的类型转换功能:

  • 隐式转换:Python 自动进行的类型转换
  • 显式转换:使用内置函数手动转换
  • 常用函数:int()、float()、str()、bool()、list()、tuple()、set()、dict()
  • 特殊函数:chr()、ord()、hex()、oct()、bin()

掌握类型转换是处理数据和编写健壮程序的重要技能。