【Python】 数据类型转换详解

一、显式类型转换(强制转换)

使用内置函数主动转换数据类型:

# 1. 整型转换 int()
num_str = "123"
num_int = int(num_str)    # 字符串 → 整型
print(num_int, type(num_int))  # 123 <class 'int'>

# 2. 浮点型转换 float()
pi_str = "3.14"
pi_float = float(pi_str)  # 字符串 → 浮点型
print(pi_float, type(pi_float))  # 3.14 <class 'float'>

# 3. 字符串转换 str()
age = 25
age_str = str(age)        # 整型 → 字符串
print(age_str, type(age_str))  # '25' <class 'str'>

# 4. 布尔型转换 bool()
print(bool(0))      # False (0为假)
print(bool(42))     # True (非0数为真)
print(bool(""))     # False (空字符串为假)
print(bool("Hi"))   # True (非空字符串为真)

二、隐式类型转换(自动转换)

Python 在运算中自动转换类型:

# 整型 + 浮点型 → 浮点型
result = 10 + 3.5   # 自动转为浮点型
print(result, type(result))  # 13.5 <class 'float'>

# 布尔型参与运算 → 整型
total = True + False + 10  # True=1, False=0
print(total)  # 11 (1 + 0 + 10)

三、特殊类型转换

# 列表/元组转换
nums = [1, 2, 3]
print(tuple(nums))  # (1, 2, 3)  列表→元组
print(set(nums))    # {1, 2, 3}  列表→集合

# 字典转换
items = [('a', 1), ('b', 2)]
print(dict(items))  # {'a': 1, 'b': 2}  键值对→字典

四、转换注意事项与陷阱

字符串转数字的格式要求

    # ✅ 合法转换
    print(int("100"))    # 100
    print(float("3.14")) # 3.14
    
    # ❌ 格式错误
    # int("3.14")   # ValueError (含小数点)
    # int("100$")   # ValueError (含非数字字符)

    浮点转整型的截断问题

      print(int(3.99))  # 3 (直接截断小数部分)
      print(int(-2.9))  # -2 (向0方向截断)

      容器转换的元素要求

        # 字典转列表只保留键
        d = {'a': 1, 'b': 2}
        print(list(d))  # ['a', 'b'] (不是键值对)
        
        # 字符串转列表会拆分为字符
        print(list("Hi"))  # ['H', 'i']

        真假值转换规则

          print(bool([]))        # False (空列表为假)
          print(bool([0]))       # True (非空列表为真)
          print(bool(None))      # False 
          print(bool("False"))   # True (非空字符串)

          精度丢失问题

            # 大整数转浮点型可能丢失精度
            big_num = 10**20
            print(float(big_num))  # 1e+20 (精度仅15-16位小数)

            五、安全转换技巧

            异常处理转换

              def safe_convert(value):
                  try:
                      return float(value)
                  except ValueError:
                      return 0.0
              
              print(safe_convert("12.3"))  # 12.3
              print(safe_convert("abc"))   # 0.0

              带默认值的转换

                import ast
                
                # 安全字符串转列表
                str_list = "[1, 2, 3]"
                real_list = ast.literal_eval(str_list)  # 安全转换
                print(real_list, type(real_list))  # [1,2,3] <class 'list'>

                实践建议

                1. 转换前用 type() 检查数据类型

                2. 字符串转数字时先使用 .isdigit() 验证

                3. 浮点转整型考虑使用 round() 四舍五入

                4. 复杂转换使用 ast.literal_eval() 替代 eval()(更安全)

                5. 关注隐式转换可能带来的精度损失

                评论
                添加红包

                请填写红包祝福语或标题

                红包个数最小为10个

                红包金额最低5元

                当前余额3.43前往充值 >
                需支付:10.00
                成就一亿技术人!
                领取后你会自动成为博主和红包主的粉丝 规则
                hope_wisdom
                发出的红包
                实付
                使用余额支付
                点击重新获取
                扫码支付
                钱包余额 0

                抵扣说明:

                1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
                2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

                余额充值