第二章 数据类型(1)
(1)PYTHON中每个值 都有一个数据类型,但在PYTHON中不用定义它们,变量的类型是基于最初的赋值,PYTHON会在内部保持跟踪它们。
(2)PYTHON的基本类型有:
BOOLEAN:True或False两个值。
NUMBER:可以是整型,浮点,分数或复数。
String:一串Unicode字符。
Byte和byte array:也就是一个JPEG文件(e.g. a JPEG image file)
LIST:有序的一串值。
TUPLE:一串不可修改的有序值。
SET:一堆无序的值。
DICTIONARY:一堆无序“键-值”对。
(所谓有序、无序我认为指的是建立时值的顺序。)
(3)布尔值有True和False两种,它们可以直接赋值给变量。由于一些从python2遗留下来的问题,True是1,False是0。
(4)在某些地方,python希望表达式去评估布尔值,这些地方被叫做“布尔上下文”。
(5)在“布尔上下文”中不同的数据类型有不同的布尔值。
(6)number类型包含了int和float:
>>>type(2.0)
<class ‘float’>
>>>type(2)
<class ‘int’>
(7)两个Int相加得到int值;int和float相加得到float——反之亦然。
(8)可以使用int()和float()对数值进行强制转换类型,int()函数会将数截断,而不是向下取整之类的。
(9)浮点数精度可达15位,而整数的可以任意大。
(10)数字运算符:
/:浮点除法,无论左右操作数是否为浮点型,返回值都是浮点型。
//:整除。如果结果是正数,你可以认为是把小数点后面的截断了;如果结果是负数,小数点后一位始终进位到整数,除非小数点后无小数。如果两个浮点数整除,解果虽然取整,但是类型为浮点数。
7//3 = 2; -7//3 = -3
**:平方
%:求余数
(11)要使用分数类型必须导入fractions模块,定义分数对象使用Fractions方法:
x = fractions.Fractions(1,3),分子为1,分母为3
(12)可以对分数对象使用所有的数学操作符,并且分数对象会自动约分。
>>>x = fractions.Fractions(1, 3)
>>>x*3
Fraction(1, 1)
(13)不能建立分母为0的分数,如果分母为0,那么PYTHON会引发ZeroDivisionError异常。
(14)基本的三角函数要导入math模块后才能使用,如:
>>>import math
>>>math.pi
3.141592653589793
>>>math.sin(math.pi/2)
1.0
>>>math.tan(math.pi/4)
0.9999999999999999
(15)因为python中没定义精准的无穷值,所以tan(PI/4)没有返回1.0,而是返回0.9999999999999999。
(16)定义的列表(list)会保留初始顺序。
(17)任何非空列表的第一项索引都是0,如:a_list[0];任何非空列表的最后一项索引都 是-1,如:a_list[-1];所以当索引为负数时,顺序是从最后一项向第一项数的顺序。
(18) 通过冒号(:)返回列表中的子集,如:a_list[1:3](包含1,但不包含3),如果没写第一个索引,其默指向一项,如果没写第二个索引,其默认指 向最后一项。如果两个索引项都不写会返回一个原有list所有项的COPY。注意,这是两个list,而不是指向同一个list的两个对象。
(19)向列表添加元素的4种方法:
1)使用+号,如:a_list + another_list;返回一个新的list
2)insert方法,如:a_list.insert(0, value);在索引位置插入value,value可以是任何值——number, string, list, franction等等
3)append方法,如:a_list.append(value);在当前列表的最后添加一个value,同样value可以是任何值。
4)extend方法,如:a_list.extend(value);对当前列表进行扩展,当value也是一个列表时和“+”操作符的效果一样。
(20)列表搜索有三种方法:
1)a_list.count(value) #统计指定的value在列表中有几个。
2)value in a_list #value是否在a_list中,这个操作要比count的速度快。
3)a_list.index(value)#value在列表中的索引(第一个找到的),它还有第二个可选参数——从哪里开始,并且还有第三个可选参数——在哪里结束(不包含该值)。当找不到value时会引发一个异常。
(21)删除列表项的几种方法:
1)del a_list[index] #删除指定索引项,之后每一项左移一位。
2)a_list.remove(value)#在列表中删除第一个发现的value,然后左移之后的每一项。当删除的value不在列表中时,会引发一个ValueError异常。
3)a_list.pop()#不带参数时移除最后一项并返回该项的值;也可以移除指定索引项的值,之后每一项左移一位。如果列表为空,pop()会引发IndexError异常。
(22)在“布尔上下文”中,列表为空时是false,列表中有任何值时为true。