跳到主要内容

有时候,我们需要对数据进行类型转换,也有时候,python帮我们做了这个转换以便程序进行下去

  • 前者我们称之为显式类型转换,比如: int(3.1415),这里我们希望求得 3.1415的整数部分是多少,需要用int()方法来进行显示转换
  • 后者我们称之为隐式类型转换,比如:4 > 3.1415,这里我们希望对 43.1415做比较,但前者是int类型,后者是float类型,两者并不能直接比较,需要统一成一种类型,所以这里python帮我们把4显式的转化为了float类型以做比较

1. 显式类型转换

1.1 使用 int()把某种类型强制转化为整型

  • 实例:
    • 比如 int(10), 这里10本来就是整形,所以这里输出还是10
    • 比如 int(3.14), 这里将3.14 float类型转化为整形,所以会有精度损失,即整形没办法表示小树部分,只能丢弃,最终得到3
    • 比如 int("3"),这里将字符串 "3"转化为整形,结果就是一个整数3
  • 转化失败的情况,因为只要是转化,就有成功和失败之说,成功了就会返回整形,失败了,就会报错:
    • 比如:int("hahaha")会抛出异常:
>>> int("hahaha")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'hahaha'

1.2 使用float()把某种类型强制转换为浮点类型

  • 实例:
    • 比如,float(3.14), 这里3.14本来就是float类型,所以还是输出3.14
    • float(4), 这里4本来是整数类型,转化为float类型之后,输出4.0
    • float("3.14"), 把字符串转化为float类型
  • 如果转化失败同样会报错:
    • float("哈哈哈")
>>> float("哈哈哈")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: '哈哈哈'

1.3 使用str()把某种类型转化为字符串类型

  • 实例:
    • 把整形转化为字符串类型,比如str(3) 输出 '3'
    • 把浮点数类型转化为字符串类型,比如str(3.14), 输出3.14
    • str("hahaha")结果就是"hahaha"

1.4 使用bool()把某种类型转化为Boolean类型

  • 例子:
    • bool(3),就是希望把整型3转化为Boolean,返回True
    • bool(0),就是希望把整型0转化为Boolean,返回False
  • 规律:除了 ''、""、''''''、""""""、0、()、[]、{}、None、0.0、0.0+0.0j、0+0j、False 是 False,其他的都是 True

包子哥寄语:可以看到上述为False的都是每种类型的值的 空 的状态 比如空字符串(注意和 这个区分,这里面其实还是包含了空格) 比如 空列表(后面会学到)等

2. 隐式类型转换

  • 规律:在表达式中,较低数据类型就会转换为较高数据类型以避免数据丢失
    • 这里在理解较低/较高数据类型的时候,可以理解为哪一种类型能表示的范围更多,哪一种级别就更高
      • 比如布尔类型只有两个值,而整数可以是 0, 1, 3, -2 等等,肯定比布尔值类型多,而且肯定能覆盖布尔值,所以整数比布尔值的级别高,而二者在进行运算的时候,会先把布尔值转化为整数类型,比如:3>True, 就会先把True转化为1(False会转化为0),即3>1结果是True
      • 而整数和浮点数中,同理浮点数的数量肯定比整数多,所以二者运算,整数会转化为浮点数,
  • 无法用隐式转化的情况:
    • 比如 3 > "3.14"会抛出异常,此时需要用显式转化先把"3.14"转化为float, 3 > float("3.14")
>>> 3 > "3.14"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'int' and 'str'