python数据类型转换

目录

           1. 隐式类型转换(自动转换)

示例:

规则:

2. 显式类型转换(强制转换)

显式转换示例

字符串与数值的转换

容器类型转换

错误处理

注意事项

总结


数据类型转换分为 隐式类型转换 和 显式类型转换

1. 隐式类型转换(自动转换)

Python 自动在不同类型的运算中转换数据类型,通常是向上转型(转换到更复杂的数据类型)。

示例
a = 5    # int
b = 3.14 # float
c = a + b  # c 是 float(自动转换)
print(type(c))  # <class 'float'>
规则
  • int → float:在算术运算中,整型自动转为浮点型。
  • 不能隐式转换的类型会报错:
    num = 123
    s = "456"
    print(num + s)  # TypeError: 无法隐式将字符串转为数字
    

2. 显式类型转换(强制转换)

通过内置函数明确转换数据类型:

函数说明示例
int(x)转为整型。参数可以是浮点数、字符串(数字格式)或布尔值。int("42") → 42
float(x)转为浮点数。参数可以是整数、字符串(数字格式)或布尔值。float("3.14") → 3.14
str(x)转为字符串。适用于所有数据类型。str(123) → "123"
complex(real, imag)创建复数,imag 默认为 0。参数为整型或浮点型。complex(3) → (3+0j)
bool(x)转为布尔型。非零值和非空容器转为 True,零和空容器转为 Falsebool(0) → False
list(s)将序列(如字符串、元组)转为列表。list("abc") → ['a', 'b', 'c']
tuple(s)将序列(列表、**)转为元组。tuple([1, 2]) → (1, 2)
set(s)将序列转为**(自动去重)。set([1, 1, 2]) → {1, 2}
dict(seq)将键值对序列(列表的元组或嵌套列表)转为字典。dict([('a',1), ('b', 2)]) → {'a':1, 'b':2}
ord(c)返回字符的 Unicode/ASCII 码。参数为单个字符。ord('A') → 65
chr(x)返回 Unicode/ASCII 码对应的字符。参数为整数。chr(65) → 'A'
hex(x)将整数转为十六进制字符串。hex(255) → '0xff'
oct(x)将整数转为八进制字符串。oct(64) → '0o100'
eval(s)将字符串作为 Python 表达式解析并执行,返回结果。注意安全性风险eval("5 + 3") → 8

显式转换示例

字符串与数值的转换
num_str = "123"
num = int(num_str)     # 转为整数
flo_str = "3.14"
flo = float(flo_str)   # 转为浮点数

age = 25
msg = "年龄:" + str(age)  # 必须显式转为字符串才能拼接
容器类型转换
s = "abc"
lst = list(s)    # ['a', 'b', 'c'] (转为列表)
t = tuple(lst)   # ('a', 'b', 'c') (转为元组)
s_set = set(lst) # {'a', 'b', 'c'} (转为**)
错误处理

当转换不合法时,会抛出异常:

try:
    x = int("abc")  # ValueError: 无效的整数格式
except ValueError:
    print("转换失败")

注意事项

  1. 字符串转数字

    • 只能转换纯数字格式的字符串,否则报错。
    int("123")       # 合法
    int("123.45")    # 非法(需先用 float())
    float("3.14")    # 合法
    
  2. 布尔值转换

    • bool(0) → Falsebool(1) → True
    • 空容器([]{}"")均转为 False
  3. eval() 的安全风险

    • 避免直接执行用户输入的字符串,可能导致代码注入攻击:
      input_str = "__import__('os').system('rm -rf /')"  # 危险操作!
      eval(input_str)  # 切勿尝试!
      
  4. 复数转换

    • complex 可接受不同格式输入:
      complex(3)       # 3+0j
      complex("3+4j")  # 3+4j (字符串直接转复数)
      

总结

  • 隐式转换:适用于数值运算中的自动类型提升(如 int 转 float)。
  • 显式转换:需借助内置函数,转换不合法时抛出 ValueError 或 TypeError
  • 谨慎使用 eval():仅用于可信输入,避免潜在安全漏洞。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值