Python的数字类型
-
-
- 整数和浮点数
- 复数
- 固定精度的十进制数
- 有理分数
- 集合
- 布尔类型
- 无穷的整数精度
- 各种数字内置函数和模块
-
数字常量
-
-
- 整数和浮点数常量
-
内置数学工具和扩展
-
-
- 表达式操作符
- +、-、*、/、>>、**、&等
- 内置数学函数
- pow、abs、round、int、hex、bin等
- 功用模块
- random、math等
- 表达式操作符
-
表达式操作符
-
-
- 表达式是处理数字的最基本的工具
- Python表达式操作符及程序:
-
-
-
- 混合操作所遵循的操作符优先级:
- 表的操作符中越靠后的优先级越高
- 位于同一行的表达式在组合的时候通常从左到右组合(除了幂运算,它是从右向左组合的,还有比较运算,是从左到右连接的)
- 括号分组的子表达式:
- Python总会先行计算括号中的表达式,然后在将结果用在表达式中
- 混合类型自动升级
- 除了在表达式中混合操作符意外,也能够混合数字的类型
- 可以把一个整数与一个浮点数相加
- 任何混合类型的表达式,其中一个操作对象是更为复杂的数字,则会导致其他的操作对象升级为一个复杂的数字,使得表达式获得一个复杂的结果
- 可以通过手动调用内置函数来强制转换类型
- int()
- float()
- 除了在表达式中混合操作符意外,也能够混合数字的类型
- 预习:运算符重载
- 所有的Python操作符可以通过Python的类或C扩展类型被重载(即实现),让它也能工作于你所创建的对象中
- Python自身自动重载了某些操作符,能够根据所处理的内置对象的类型而执行不同的操作
- 这种特性通常称为多态,这个术语指操作的意义取决于所操作的对象的类型
- 混合操作所遵循的操作符优先级:
-
实际应用中的数字
-
-
- 变量和基本的表达式
- 变量在它第一次赋值时创建
- 变量在表达式中使用将被替换为它们的值
- 变量在表达式中使用以前必须已赋值
- 变量像对象一样不需要在一开始进行声明
- 数字显示的格式
- 变量和基本的表达式
-
>>> num = 1/3.0
>>> num
0.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<c
True
>>> a<c<b
False
>>> a<b and b<c
True
-
- 除法:传统除法、Floor除法和真除法
- X / Y :传统除法和真除法
- Python2.6以前的版本,这个操作对于整数会省去小数部分,对于浮点数会保持小数部分
- 在Python3版本中将会编程真除法(无论任何类型都会保持小数部分)
- X // Y:Floor除法
- 不考虑操作对象的类型,总会省略掉结果的小数部分,剩下最小的能整除的整数部分
- 添加真除法是为了解决最初的传统除法的结果依赖于操作数类型这一现象
- Python3.0取消了传统除法:/和//操作符分别实现真除法和Floor除法
- floor除法与截断除法
- 在执行除法操作的时候,只有真正地截断了正的结果,因此截断除法和floor除法是相同的;对于负数,它就是一个floor结果。
- 如果想要截断而不管符号,可以总是调用math.trunc来得到一个浮点除法结果
- X / Y :传统除法和真除法
- 十六进制、八进制和二进制计数
- 0o……oct():八进制
- 0x……hex():十六进制
- 0b……bin():二进制
- 内置int()函数会将一个数字的字符串变换为一个整数,并可以通过定义的第二个参数来确定变换后的数字的进制
- 除法:传统除法、Floor除法和真除法
>>>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位,称为二进制数0100
4
>>> x | 2#0001与0010的并集,0011
3
>>> x & 1#0001与0001的交集,0001
1
其他的内置数学工具
-
-
- 数字处理的内置函数和内置模块
- 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}
-
- 布尔型
数字扩展
-
-
- NumPy(Numeric Python)提供高级的数字变成工具
- 矩阵数据类型、向量处理和高级的计算库
- NumPy(Numeric Python)提供高级的数字变成工具
-