python - 数据类型转换

在 Python 中,数据类型转换 (Type Casting/Conversion)是指将一种数据类型(如整数、字符串等)转换为另一种数据类型。Python 支持隐式转换 (自动完成)和显式转换(手动调用函数)。以下是详细的分类和示例:


一、隐式类型转换

Python 会自动完成某些类型的转换(例如数值间的运算):

ini 复制代码
python
a = 10      # int
b = 3.5     # float
c = a + b   # 自动将 a 转为 float,结果为 13.5(float)
print(type(c))  # <class 'float'>

二、显式类型转换

通过内置函数手动转换类型,常见场景如下:

1. 转换为整数 int()

ini 复制代码
python
# 字符串 → 整数
num_str = "123"
num_int = int(num_str)  # 123
print(type(num_int))   # <class 'int'>
 
# 浮点数 → 整数(截断小数部分)
float_num = 3.9
int_num = int(float_num)  # 3

2. 转换为浮点数 float()

ini 复制代码
python
# 字符串 → 浮点数
pi_str = "3.14"
pi_float = float(pi_str)  # 3.14
 
# 整数 → 浮点数
num = 5
float_num = float(num)    # 5.0

3. 转换为字符串 str()

ini 复制代码
python
# 任何类型 → 字符串
num = 42
str_num = str(num)        # "42"
 
boolean = True
str_bool = str(boolean)   # "True"

4. 转换为布尔值 bool()

  • False 值 :0、0.0、""(空字符串)、None、[](空列表)、{}(空字典)等。
  • True 值:其他非空或非零值。
php 复制代码
python
print(bool(0))      # False
print(bool("Hi"))   # True
print(bool([]))     # False

5. 转换为列表 list()

ini 复制代码
python
# 字符串 → 字符列表
s = "hello"
list_s = list(s)  # ['h', 'e', 'l', 'l', 'o']
 
# 元组 → 列表
tuple_data = (1, 2, 3)
list_data = list(tuple_data)  # [1, 2, 3]

6. 转换为元组 tuple()

ini 复制代码
python
# 列表 → 元组
list_data = [1, 2, 3]
tuple_data = tuple(list_data)  # (1, 2, 3)

7. 转换为集合 set()

  • 去重并转换为无序集合:
ini 复制代码
python
list_with_duplicates = [1, 2, 2, 3]
unique_set = set(list_with_duplicates)  # {1, 2, 3}

8. 转换为字典 dict()

  • 需满足键值对结构(如嵌套列表或元组):
ini 复制代码
python
pairs = [("a", 1), ("b", 2)]
dict_data = dict(pairs)  # {'a': 1, 'b': 2}

三、特殊场景处理

1. 字符串与数字的转换

  • 字符串转数字 :必须为合法数字字符串,否则抛出 ValueError。

    perl 复制代码
    python
    int("123")    # 成功 → 123
    int("12a")    # 报错: ValueError
  • 数字转字符串:任何数字均可转换。

    python 复制代码
    str(3.14)     # "3.14"

2. 复杂类型转换

  • 列表转字符串 :需手动拼接(如 join())。

    python 复制代码
    words = ["Hello", "World"]
    sentence = " ".join(words)  # "Hello World"
  • JSON 字符串转字典 :使用 json 模块。

    python 复制代码
    import json
    json_str = '{"name": "Alice", "age": 25}'
    dict_data = json.loads(json_str)  # {'name': 'Alice', 'age': 25}

3. 自定义对象转换

  • 通过实现 __str__() 或 __int__() 等魔术方法控制转换行为:

    python 复制代码
    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
        
        def __str__(self):
            return f"Person(name={self.name}, age={self.age})"
        
        def __int__(self):
            return self.age
     
    p = Person("Bob", 30)
    print(str(p))   # "Person(name=Bob, age=30)"
    print(int(p))   # 30

四、常见错误与注意事项

  1. 无效转换:

    python 复制代码
    int("hello")  # ValueError: invalid literal for int()
  2. 精度丢失:

    python 复制代码
    int(3.9)      # 3(直接截断,不四舍五入)
  3. 类型检查 :转换前建议用 isinstance() 验证类型。

    python 复制代码
    if isinstance(input_str, str):
        num = int(input_str)

五、总结

转换目标 常用函数 示例
整数 int() int("42") → 42
浮点数 float() float("3.14") → 3.14
字符串 str() str(100) → "100"
布尔值 bool() bool(1) → True
列表 list() list("abc") → ['a','b','c']
元组 tuple() tuple([1, 2]) → (1, 2)
集合 set() set([1, 1, 2]) → {1, 2}
字典 dict() dict([("a", 1)]) → {'a': 1}

关键点:

  • 显式转换需确保数据格式合法(如字符串必须是数字格式才能转 int)。
  • 隐式转换通常发生在数值运算中(如 int + float → float)。
  • 复杂转换(如 JSON、自定义对象)需借助模块或魔术方法。
相关推荐
信誓旦旦的程序猿7 小时前
【Python量化实战宝典 #08】可转债与债券接口手册:转股价·溢价率·纯债价值(Python 可跑)
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
砚底藏山河8 小时前
python量化:行情数据回溯
java·开发语言·python·金融·maven
今年下半年8 小时前
AI智能体项目实战记录(02):初始化 Python 项目
开发语言·人工智能·python·fastapi
Williamtym8 小时前
PickGo Lab实践:用浏览器、Python和MCP串起机器人搬运仿真
开发语言·python·机器人
CS创新实验室8 小时前
Python 对象“死“了之后去了哪?——引用计数与分代垃圾回收
开发语言·jvm·python
CCblandy8 小时前
雪花 ID 四个边界实测:时钟回拨重号 500 个,前端 JSON.parse 直接丢精度
后端·python·算法·性能优化·架构
quantdash_cc8 小时前
Pandas 处理分钟级股票行情:从原始数据清洗到 K 线聚合
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
把我格子衫拿来9 小时前
VTK 9.5 与 Qt 6 联合开发:从嵌入三维窗口到可维护的桌面架构
c++·python·qt·vtk·三维可视化
cpolar技术支持9 小时前
把配置发出去怕带出密钥?先把含凭据配置转成脱敏只读快照,用 cpolar 给同事核对差异
运维·python·内网穿透·cpolar·配置脱敏
惊讶的猫9 小时前
langchian_agent的高级使用
python