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() 键值对序列 字典 结构化数据
相关推荐
Unbelievabletobe4 小时前
解决了股票api接口盘后数据更新慢的问题
大数据·开发语言·python
lpd_lt6 小时前
AI Coding的常用Prompt技巧
python·ai·ai编程
小江的记录本6 小时前
【JVM虚拟机】堆内存分代模型:年轻代(Eden+Survivor)、老年代、元空间Metaspace(附《思维导图》+《面试高频考点清单》)
java·前端·jvm·后端·python·spring·面试
在繁华处6 小时前
Java从零到熟练(三):流程控制
java·开发语言·python
asdzx676 小时前
使用 Python 快速提取 PDF 中的表格
python·pdf
无情的西瓜皮6 小时前
MCP协议实战:用Python从零搭建一个AI Agent工具服务器(保姆级教程)
服务器·人工智能·python·mcp
岁月宁静7 小时前
驾驭 AI 这匹野马:深入解析智能体 Harness 工程
vue.js·python
星恒随风8 小时前
Python 基础语法详解(一):从表达式、变量到数据类型
开发语言·笔记·python·学习
888CC++8 小时前
java 并发编程
java·开发语言·python
Dxy12393102168 小时前
python缩放图片如何保证图片质量
python