有时候,我们需要对数据进行类型转换,也有时候,python帮我们做了这个转换以便程序进行下去
- 前者我们称之为显式类型转换,比如:
int(3.1415)
,这里我们希望求得 3.1415的整数部分是多少,需要用int()
方法来进行显示转换 - 后者我们称之为隐式类型转换,比如:
4 > 3.1415
,这里我们希望对4
和3.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,返回Truebool(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 - 而整数和浮点数中,同理浮点数的数量肯定比整数多,所以二者运算,整数会转化为浮点数,
- 比如布尔类型只有两个值,而整数可以是 0, 1, 3, -2 等等,肯定比布尔值类型多,而且肯定能覆盖布尔值,所以整数比布尔值的级别高,而二者在进行运算的时候,会先把布尔值转化为整数类型,比如:
- 这里在理解较低/较高数据类型的时候,可以理解为哪一种类型能表示的范围更多,哪一种级别就更高
- 无法用隐式转化的情况:
- 比如
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'