什么是数据类型?
我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区别的,因此,在每个编程语言里都会有一个叫数据类型的东东,其实就是对常用的各种数据类型进行了明确的划分,你想让计算机进行数值运算,你就传数字给它,你想让他处理文字,就传字符串类型给他。Python中常用的数据类型有多种,今天我们暂只讲3种, 数字、字符串、布尔类型。
数字
int(整型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(长整型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。注意:在Python3里不再有long类型了,全都是int。
其中type()可以查看数据类型。
![](https://img.haomeiwen.com/i11902983/aa32893ae91f7aeb.png)
字符串
在Python中,加了引号的字符都被认为是字符串!(单,双引号也可以)
![](https://img.haomeiwen.com/i11902983/ee4d9a1358d1de7e.png)
单引号、双引号、多引号有什么区别呢? 只有下面这种情况 你需要考虑单双的配合。
![](https://img.haomeiwen.com/i11902983/0161aab9962e0eeb.png)
多引号什么作用呢?作用就是多行字符串必须用多引号。
![](https://img.haomeiwen.com/i11902983/a76f692b2b49c81d.png)
字符串拼接
数字可以进行加减乘除等运算,字符串呢?让我大声告诉你,也能?但只能进行"相加"和"相乘"运算。注:只能对同种类型才可以。
![](https://img.haomeiwen.com/i11902983/96fb5c8049255cf5.png)
![](https://img.haomeiwen.com/i11902983/4043cffe43d82db4.png)
布尔型
bool型只有两个值:True和False
之所以将bool值归类为数字,是因为我们也习惯用1表示True,0表示False。
整型
Python中的整数属于int类型,默认用十进制表示,此外也支持二进制,八进制,十六进制表示方式。
进制转换
尽管计算机只认识二进制,但是为了迎合我们的习惯,python中的数字默认还是十进制。还提供了一些方法来帮助我们做转换。比如是进制转换为二进制使用bin方法,在转换结果前面还会加上‘0b’表示是一个二进制书。
既然十进制可以转换为二进制,那么其实使用同样的原理也可以转换为其他进制,python也为我们提供了十进制转换成八进制和十六进制的方法,分别是oct和hex。八进制前面以‘0o’标示,十六进制以‘0x’标示
![](https://img.haomeiwen.com/i11902983/69e82844eacc2e7e.png)
取余运算(%)
![](https://img.haomeiwen.com/i11902983/2ae226c25b693c4a.png)
算术运算(+ - * / // divmod **)
![](https://img.haomeiwen.com/i11902983/fe3e419216712601.png)
浮点型
浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学计数法。
好了,我们来解释上面那句装。。。的话:
Python的浮点数就是数学中的小数(alex一定要强调float是有限小数或无限循环小数,就好像谁真的关心似的)。
在运算中,整数与浮点数运算的结果也是一个浮点数。
为什么要叫做float浮点型?
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,
一个浮点数的小数点位置是可变的,比如,
1.23*109和12.3*108是相等的。
![](https://img.haomeiwen.com/i11902983/18678ec9d0656c02.png)
浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代:
1.23*109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。
整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的而浮点数运算则可能会有四舍五入的误差。
关于小数不精准问题
Python默认的是17位精度,也就是小数点后16位,尽管有16位,但是这个精确度却是越往后越不准的。
首先,这个问题不是只存在在python中,其他语言也有同样的问题
其次,小数不精准是因为在转换成二进制的过程中会出现无限循环的情况,在约省的时候就会出现偏差。
比如:11.2的小数部分0.2转换为2进制则是无限循环的00110011001100110011...
单精度在存储的时候用23bit来存放这个尾数部分(前面9比特存储指数和符号);同样0.6也是无限循环的;
这里有一个问题,就是当我们的计算需要使用更高的精度(超过16位小数)的时候该怎么做呢?(更新中)
复数:
![](https://img.haomeiwen.com/i11902983/5994f486c76e29db.png)
从上面的图中我们就可以看出,复数complex是由实数和虚数组成的
要了解复数,其实关于复数还需要先了解虚数。虚数(就是虚假不实的数):平方为复数的数叫做虚数。
复数是指能写成如下形式的数a+bi,这里a和b是实数,i是虚数单位(即-1开根)。在复数a+bi中,a称为复数的实部,b称为复数的虚部(虚数是指平方为负数的数),i称为虚数单位。
当虚部等于零时,这个复数就是实数;当虚部不等于零时,这个复数称为虚数。
注,虚数部分的字母j大小写都可以。
知识补充:
在对负数使用%和//时要当心,由于python取的整数除法结果的floor值,因此最终结果要比你所期望值小1:
# 在去模运算,结果值的符号由第二个操作数的符号决定。
网友评论