第九章、Python入门教程系列——基本数据类型之间的转换
为什么要数据类型转换?
前面已经学了python的基本数据类型,有数字、字符串、布尔、列表、元组、字典、集合和None。有时候,我们会对数据的类型做转换,从而更加方便的操作数据。但是数据类型也不是可以随便转换的。必须满足一些条件,除了None以外,其他的都能转换成可转换的数据类型。
数字和布尔
前面提过,布尔本质上也是个数字。除了0以外,其余的数字都是True。要想把数字转换成布尔,就需要用bool()
。
1 | print(bool(-1)) |
这里说到了布尔类型就多讲一些。不单单是数字可以转换成布尔类型,任何数据类型都可以转换成布尔类型。但其他数据类型的数据是空的话,那么他就是False
,反则是True
。比如空字符串、空列表、空元组等。
1 | tup = () |
所有空的数据类型都是False
,注意,第二个是用字符串True转换成布尔,虽然字符串的内容是True,但是,布尔是更具数据类型是否为空来转换的,所以不管字符串里的内容是什么,只要不是空,就是True
,反之为False
,包括None,所以布尔用来判断数据是否为空最好的选择。
而需要把布尔转换成整数用int()
。数字不仅仅是有整数,还有小数,当需要把整数转换成小数的时候就需要用flaot()
,注意,如果把小数转换成了整数,小数的部分就会被丢弃。
1 | print(int(True)) |
将布尔类型转换成数字可以看到True
就是数字1,False
就是数字0,当两个True
相加的时候,结果是数字2,这就说明,布尔类型的本质就是数字0和1,而将数字转换成布尔类型的时候,除了0是False
,其余的数字都是True
。
字符串也是可以转换成数字,很多时候都需要把输入的字符转换成数字做加减乘除运算,所以数字格式的字符串也可以转成数字。但是,这里是区分整数和小数的,如果是整数,那么依然用int()
,如果是小数,那么就用float()
。
1 | print(int("1")) |
字符串
字符串是兼容性最强的数据类型,为什么这么说呢,主要是,任何数据类型都可转换成字符串,而字符串在满足类型格式的情况下,也可以转换成指定的数据类型。
要想转换成字符串,就用str()
,任何数据类型都可以转换,而需要把字符串转成其他类型,就要用指定的数据类型的方法,前面只讲了数字和布尔,其他的还没讲,所以字符串转换成其他数据类型会安插在各个数据类型的转换里将。
1 | print(str(10)) |
字符串的兼容性很强,基本任何数据类型都可以转换成字符串,这个这里就不做过多的说明。
列表和元组
列表和元组是非常相似的两个数据类型,一个是可变的,一个是不可变的。所以这两个类型可以互相的转换,转列表用list()
,转元组用tuple()
。
1 | print(list((1,2,3))) |
字符串也可以转列表或者元组,这里比较不一样,字符串的每个字符会成为列表或者元组的每个元素。
1 | print(list("abcdefg")) |
这个在提取字符每个元素的时候会非常好用。
字典和集合
由于字典是通过键值对存储的,而其他数据类型都没有键值对,所以一般不会将其他类型转成字典。也没办法转成字典。一般都是通过其他方法生成一个字段,这个在后面的章节讲解。
集合是存储的是无序的元素,所以可以将字符串、列表、元组、字典这些存在元素的数据类型转换成集合,用set()
,字符串还是以每个字符作为元素。而字典就仅仅只是把键作为了元素,这一点要特别注意。
1 | print(set("abcd")) |
强大的eval()
前面讲了各种基本数据类型之间的转换。这里再讲一个非常非常强大的eval()
,它可以自动将字符串转换成符合格式的类型。像前面的列表、元组、集合,都是以字符串的字符为元素,但是我有一个长得和列表一模一样的字符串,那么再用list()
,就是把[]
也当成的字符。这时就可以用eval()
来解决这个问题了。
1 | test_str = "[1,'a',True]" |
这里用列表来做演示,用同一个列表格式的字符串,可以看到,如果用list()
会把符号也当作是元素。而用eval()
则会自动的去识别,自动转换成了符合格式的类型。
1 | test_str = "{'a':1,'b':2}" |
同样的前面的字典也可以转换。