Python的数字类型
整数和浮点数复数固定精度的十进制数有理分数集合布尔类型无穷的整数精度各种数字内置函数和模块数字常量
整数和浮点数常量内置数学工具和扩展
表达式操作符 +、-、*、/、>>、**、&等内置数学函数 pow、abs、round、int、hex、bin等功用模块 random、math等表达式操作符
表达式是处理数字的最基本的工具Python表达式操作符及程序:混合操作所遵循的操作符优先级: 表的操作符中越靠后的优先级越高位于同一行的表达式在组合的时候通常从左到右组合(除了幂运算,它是从右向左组合的,还有比较运算,是从左到右连接的)括号分组的子表达式: Python总会先行计算括号中的表达式,然后在将结果用在表达式中混合类型自动升级 除了在表达式中混合操作符意外,也能够混合数字的类型 可以把一个整数与一个浮点数相加任何混合类型的表达式,其中一个操作对象是更为复杂的数字,则会导致其他的操作对象升级为一个复杂的数字,使得表达式获得一个复杂的结果可以通过手动调用内置函数来强制转换类型 int()float()预习:运算符重载 所有的Python操作符可以通过Python的类或C扩展类型被重载(即实现),让它也能工作于你所创建的对象中Python自身自动重载了某些操作符,能够根据所处理的内置对象的类型而执行不同的操作这种特性通常称为多态,这个术语指操作的意义取决于所操作的对象的类型实际应用中的数字
变量和基本的表达式 变量在它第一次赋值时创建变量在表达式中使用将被替换为它们的值变量在表达式中使用以前必须已赋值变量像对象一样不需要在一开始进行声明数字显示的格式>>> num = 1/3.0>>> num0.3333333333333333>>> print(num)0.3333333333333333>>> '%e' % num'3.333333e-01'>>> '%4.2f' % num'0.33'>>> '{0:4.2f}'.format(num)'0.33'
比较:一般的和连续的 一般比较 比较操作数的相对大小,并且返回一个布尔类型的结果连续比较 范围测试的连续比较例如,表达式(A < B < C)测试B是否在A和C之间,等同于布尔测试(A < B and B < C),但更容易辨识(和录入)
>>> a = 1>>> b = 2 >>> c = 3>>> a<b<cTrue>>> a<c<bFalse>>> a<b and b<cTrue
除法:传统除法、Floor除法和真除法 X / Y :传统除法和真除法 Python2.6以前的版本,这个操作对于整数会省去小数部分,对于浮点数会保持小数部分在Python3版本中将会编程真除法(无论任何类型都会保持小数部分)X // Y:Floor除法 不考虑操作对象的类型,总会省略掉结果的小数部分,剩下最小的能整除的整数部分添加真除法是为了解决最初的传统除法的结果依赖于操作数类型这一现象Python3.0取消了传统除法:/和//操作符分别实现真除法和Floor除法floor除法与截断除法 在执行除法操作的时候,只有真正地截断了正的结果,因此截断除法和floor除法是相同的;对于负数,它就是一个floor结果。如果想要截断而不管符号,可以总是调用math.trunc来得到一个浮点除法结果十六进制、八进制和二进制计数 0o……oct():八进制0x……hex():十六进制0b……bin():二进制内置int()函数会将一个数字的字符串变换为一个整数,并可以通过定义的第二个参数来确定变换后的数字的进制
>>>int('100', 8)64
eval()函数,将会把字符串作为Python代码
>>>eval('0x40')64
字符串格式化方法调用和表达式将一个整数转换成八进制数和十六进制数的字符串
>>>'{0:o}'.format(64)'100'>>>'%o' % (64)'100'
位操作 Python支持C语言中的大多数数学表达式,包括把整数当做二进制位串对待的操作,还可以实现位移及布尔操作:
>>> x = 1#0001>>> x << 2#二进制数0001左移了2位,称为二进制数01004>>> x | 2#0001与0010的并集,00113>>> x & 1#0001与0001的交集,00011
其他的内置数学工具
数字处理的内置函数和内置模块 pow()内置函数计算幂>>>pow(2, 4)16
abs()内置函数计算绝对值
>>>abs(-42.0)42
sum(),min(),max()floor(),trunc()截断,round()取整sqrt()平方根random()随机
其他数字类型
小数数字 小数是有固定锝精度的浮点数,像浮点数,但它们由固定的位数和小数点decimal模块中的decimal()可以转换成小数基础知识 浮点数学缺乏精确性,因为用来存储数值的空间有限设置全局精度 decimal模块的其他工具可以用来设置所有小数数值的精度、设置错误处理等小数上下文管理器分数类型 基础知识 分数是小数静定精度类型的“近亲”,都可以通过固定小数位数和指定摄入或截断策略来控制数值精度。分数以类似于小数的方式使用,也存在于模块内fractions模块中的构造函数Fraction(x, y)传递一个分子和分母产生一个分数数值精度 分数和小数都提供了比浮点数更为精确的结果,但付出了一些速度的代价转换和混合类型集合 集合(set)是一些唯一的、不可变的对象的一个无序集合>>> set('1231231'){'3', '2', '1'}
集合支持与数学集合理论相对应的操作由于集合是无序的,并且不会把键匹配到值,它们既不是序列也不是映射类型,它们是自成一体的类型作为可迭代的容器,集合也可以用于len、for循环和列表解析这样的操作中,但由于它们是无序的,所以不支持索引和切片的操作Python3中的集合常量
>>> set([1,2,2,3,4]){1, 2, 3, 4}
集合像是无值的字典,集合的项是无序的、唯一的、不可改变的,因此,它们的行为和字典的键很像Python中的{}仍然是一个字典,空的结合必须通过内置函数set来创建不可变限制和冻结集合 列表和字典不能嵌入到集合中如果你需要存储复合值的话,元组是可以嵌入的集合解析 与列表解析类似,但是,编写在花括号中而不是方括号中,并且作用于集合而不是列表,结果是创建一个新的集合
>>> [x for x in range(0,5)]#列表解析[0, 1, 2, 3, 4]>>> {x for x in range(0,5)}#集合解析{0, 1, 2, 3, 4}
布尔型