python 中数据类型转换

数据类型转换是指将一种数据类型转换为另一种数据类型。Python 支持隐式类型转换 (自动)和显式类型转换(手动)两种方式。

一、转换的类型

转换类型 关键字 说明
整数 int() 转换为整型
浮点数 float() 转换为浮点型
字符串 str() 转换为字符串
布尔值 bool() 转换为布尔型
列表 list() 转换为列表
元组 tuple() 转换为元组
集合 set() 转换为集合
字典 dict() 转换为字典
复数 complex() 转换为复数

二、数字类型转换

1. 整数转换 -int()

复制代码
# 字符串 → 整数
print(int("123"))        # 123
print(int("  456  "))    # 456(自动去除空白)
print(int("-789"))       # -789

# 浮点数 → 整数(截断,不是四舍五入)
print(int(3.14))         # 3
print(int(3.99))         # 3
print(int(-3.14))        # -3

# 布尔值 → 整数
print(int(True))         # 1
print(int(False))        # 0

# 进制转换
print(int("FF", 16))     # 255(十六进制)
print(int("1010", 2))    # 10(二进制)
print(int("17", 8))      # 15(八进制)
print(int("10", 10))     # 10(十进制)

# 转换失败的情况
# int("123a")           # ValueError
# int("12.34")          # ValueError(不能直接转)

2. 浮点数转换 -float()

复制代码
# 整数 → 浮点数
print(float(42))         # 42.0
print(float(-10))        # -10.0

# 字符串 → 浮点数
print(float("3.14"))     # 3.14
print(float("  -2.5 "))  # -2.5
print(float("1e-3"))     # 0.001(科学计数法)
print(float("inf"))      # inf(无穷大)
print(float("nan"))      # nan(非数字)

# 布尔值 → 浮点数
print(float(True))       # 1.0
print(float(False))      # 0.0

# float("abc")           # ValueError

3. 复数转换 -complex()

复制代码
# 整数/浮点数 → 复数
print(complex(3))        # (3+0j)
print(complex(3.14))     # (3.14+0j)

# 字符串 → 复数
print(complex("3+4j"))   # (3+4j)
print(complex("5-2j"))   # (5-2j)

# 指定实部和虚部
print(complex(2, 3))     # (2+3j)
print(complex(3.14, 2.5))  # (3.14+2.5j)

# complex("abc")         # ValueError

4. 布尔值转换 -bool()

复制代码
# 假值(转换为 False)
print(bool(0))           # False
print(bool(0.0))         # False
print(bool(""))          # False
print(bool([]))          # False
print(bool(()))          # False
print(bool({}))          # False
print(bool(set()))       # False
print(bool(None))        # False

# 真值(转换为 True)
print(bool(1))           # True
print(bool(-1))          # True
print(bool(3.14))        # True
print(bool("Hello"))     # True
print(bool([1, 2]))      # True
print(bool({"a": 1}))    # True

三、序列类型转换

1. 字符串转换 -str()

复制代码
# 数字 → 字符串
print(str(123))          # "123"
print(str(3.14))         # "3.14"
print(str(True))         # "True"

# 序列 → 字符串
print(str([1, 2, 3]))    # "[1, 2, 3]"
print(str((1, 2, 3)))    # "(1, 2, 3)"
print(str({"a": 1}))     # "{'a': 1}"

# 自定义对象
class Person:
    def __init__(self, name):
        self.name = name
    
    def __str__(self):
        return f"Person({self.name})"

p = Person("Alice")
print(str(p))            # Person(Alice)

2. 列表转换 -list()

复制代码
# 字符串 → 列表
print(list("Hello"))     # ['H', 'e', 'l', 'l', 'o']

# 元组 → 列表
print(list((1, 2, 3)))   # [1, 2, 3]

# 集合 → 列表
print(list({1, 2, 3}))   # [1, 2, 3]

# 字典 → 列表(只转换键)
print(list({"a": 1, "b": 2}))  # ['a', 'b']

# 范围 → 列表
print(list(range(5)))    # [0, 1, 2, 3, 4]

# 可迭代对象 → 列表
print(list(map(str, [1, 2, 3])))  # ['1', '2', '3']

3. 元组转换 -tuple()

复制代码
# 字符串 → 元组
print(tuple("Hello"))    # ('H', 'e', 'l', 'l', 'o')

# 列表 → 元组
print(tuple([1, 2, 3]))  # (1, 2, 3)

# 集合 → 元组
print(tuple({1, 2, 3}))  # (1, 2, 3)

# 字典 → 元组(只转换键)
print(tuple({"a": 1, "b": 2}))  # ('a', 'b')

4. 集合转换 -set()

复制代码
# 字符串 → 集合(自动去重)
print(set("Hello"))      # {'H', 'e', 'l', 'o'}

# 列表 → 集合(自动去重)
print(set([1, 2, 2, 3])) # {1, 2, 3}

# 元组 → 集合
print(set((1, 2, 2, 3))) # {1, 2, 3}

# 字典 → 集合(只转换键)
print(set({"a": 1, "b": 2}))  # {'a', 'b'}

5. 冻结集合转换 -frozenset()

复制代码
# 创建不可变集合
fs = frozenset([1, 2, 2, 3])
print(fs)                # frozenset({1, 2, 3})

# 字符串 → 冻结集合
fs2 = frozenset("Hello")
print(fs2)               # frozenset({'H', 'e', 'l', 'o'})

# 支持所有集合操作,但不能修改
# fs.add(4)              # AttributeError

四、字典转换 dict()

1. 创建字典的方式

复制代码
# 从键值对列表创建
pairs = [("name", "Alice"), ("age", 25)]
print(dict(pairs))       # {'name': 'Alice', 'age': 25}

# 从关键字参数创建
print(dict(name="Bob", age=30))  # {'name': 'Bob', 'age': 30}

# 从两个列表创建
keys = ["name", "age"]
values = ["Charlie", 35]
print(dict(zip(keys, values)))  # {'name': 'Charlie', 'age': 35}

# 从字典推导式创建
squares = {x: x**2 for x in range(5)}
print(squares)           # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

# 可迭代对象(每个元素是键值对)
items = [("a", 1), ("b", 2)]
print(dict(items))       # {'a': 1, 'b': 2}

2. 使用 dict() 转换的限制

复制代码
# 不能直接转换字符串
# dict("abc")            # TypeError

# 不能直接转换列表
# dict([1, 2, 3])        # TypeError

# 必须是键值对形式
valid_pairs = [(1, 'a'), (2, 'b')]
print(dict(valid_pairs)) # {1: 'a', 2: 'b'}

五、隐式类型转换

Python 在某些运算中会自动进行类型转换。

1. 数字类型自动提升

复制代码
# int → float
result = 3 + 3.14        # 6.14(int 自动转为 float)

# bool → 数字
print(True + 1)          # 2(True 转为 1)
print(False + 1)         # 1(False 转为 0)

# int → complex
c = 3 + 2j
print(5 + c)             # (8+2j)

2. 在比较运算中

复制代码
# 数字比较
print(3 == 3.0)          # True(类型不同但值相等)

# 字符串与数字不能隐式转换
# print("3" + 5)         # TypeError

六、常用转换模式

1. 字符串 ↔ 字节串

复制代码
# 字符串 → 字节串
text = "你好"
bytes_data = text.encode('utf-8')
print(bytes_data)        # b'\xe4\xbd\xa0\xe5\xa5\xbd'

# 字节串 → 字符串
decoded = bytes_data.decode('utf-8')
print(decoded)           # 你好

# 其他编码
text.encode('gbk')       # GBK 编码
text.encode('ascii', errors='ignore')  # 忽略无法编码的字符

2. 列表 ↔ 字符串

复制代码
# 列表 → 字符串
chars = ['a', 'b', 'c']
print(''.join(chars))    # abc
print(','.join(chars))   # a,b,c

# 字符串 → 列表
s = "a,b,c"
print(s.split(','))      # ['a', 'b', 'c']

3. 进制转换

复制代码
# 十进制 → 其他进制
num = 255
print(bin(num))          # 0b11111111(二进制)
print(oct(num))          # 0o377(八进制)
print(hex(num))          # 0xff(十六进制)

# 其他进制 → 十进制
print(int('11111111', 2))  # 255
print(int('377', 8))       # 255
print(int('ff', 16))       # 255

4. ASCII 码转换

复制代码
# 字符 → ASCII 码
print(ord('A'))          # 65
print(ord('中'))         # 20013

# ASCII 码 → 字符
print(chr(65))           # 'A'
print(chr(20013))        # '中'

# 应用:大小写转换
def toggle_case(char):
    if 'a' <= char <= 'z':
        return chr(ord(char) - 32)
    elif 'A' <= char <= 'Z':
        return chr(ord(char) + 32)
    return char

print(toggle_case('a'))  # 'A'
print(toggle_case('Z'))  # 'z'

汇总

转换函数 输入类型 输出类型 常见用途
int() 数字、数字字符串 整数 用户输入处理
float() 数字、数字字符串 浮点数 计算、货币
str() 任意类型 字符串 输出、日志
bool() 任意类型 布尔值 条件判断
list() 可迭代对象 列表 数据转换
tuple() 可迭代对象 元组 不可变序列
set() 可迭代对象 集合 去重
dict() 键值对序列 字典 结构化数据
相关推荐
毋语天1 小时前
Python 模块、包与异常处理:构建更稳健的程序
开发语言·python
阿kun要赚马内1 小时前
Python多进程中的数据隔离
python
才兄说2 小时前
机器人二次开发机器狗巡检?低耗电自主绕行
python
-SOLO-2 小时前
Python 爬取小红书 文章标题和内容 仅供学习
android·python·学习
小陈工2 小时前
Python异步编程进阶:asyncio高级模式与性能调优
开发语言·前端·数据库·人工智能·python·flask·numpy
是有头发的程序猿2 小时前
竞品店铺拆解:1688店铺首页装修数据API Python实战教程
开发语言·python
Ricardo-Yang3 小时前
使用GEE以及LandSat8植被指数NDVI计算
python·深度学习·神经网络·算法·视觉检测
Derrick__13 小时前
LangChain基础实战手记:如何给大模型装上“大脑(记忆)”和“双手(工具)”?
人工智能·python·langchain·个人开发
tangjunjun-owen3 小时前
[特殊字符] Python异步调用本地Ollama大模型实战:从Demo到高并发避坑指南
开发语言·chrome·python