python中的标准类型——数字类型

1.numbers.Number (数字的抽象基类)

此类对象由数字字面值创建,并会被作为算术运算符和算术内置函数的返回结果。数字对象是不可变的;一旦创建其值就不再改变。Python 中的数字当然非常类似数学中的数字,但也受限于计算机中的数字表示方法。

字面值用于表示一些内置类型的常量。
数字字面值有三种类型: 整型数、浮点数和虚数。没有专门的复数字面值(复数可由一个实数加一个虚数合成)。注意数字字面值并不包含正负号;-1 这样的负数实际上是由单目运算符’-’ 和字面值1 合成的。
整型数字面值的长度没有限制,能一直大到占满可用内存。(在3.6 版更改: 允许在字面值中使用下划线进行分组)如下示例
在这里插入图片描述
浮点数字面值允许的范围依赖于具体实现。(在3.6 版更改: 允许在字面值中使用下划线进行分组)如下示例
在这里插入图片描述
虚数字面值将生成一个实部为0.0 的复数。复数是以一对浮点数来表示的,它们的取值范围相同。要创
建一个实部不为零的复数,就加上一个浮点数,例如(3+4j)。如下示例
在这里插入图片描述

numbers.Number此类对象包含三个对象:Integral、Real (float)、Complex (complex),所以python可以区分整型数、浮点型数和复数。(标准库包含附加的数字类型,如表示有理数的fractions.Fraction以及以用户定制精度表示浮点数的decimal.Decimal。)

不带修饰的整数字面值(包括十六进制、八进制和二进制数)会生成整数。包含小数点或幂运算符的数字字面值会生成浮点数。在数字字面值末尾加上’j’或’J’ 会生成虚数(实部为零的复数),你可以将其与整数或浮点数相加来得到具有实部和虚部的复数。

1.1 numbers.Integral对象

此类对象表示数学中整数集合的成员(包括正数和负数),整型数可以细分为两种类型

一类是整型(int):此类对象表示任意大小的数字,仅受限于可用的内存(包括虚拟内存),这一点在python2与python3中是不同的,如下所示
在这里插入图片描述
另一类是布尔型(bool):此类对象表示逻辑值False 和True。代表False 和True 值的两个对象是唯二的布尔对象,布尔类型是整型的子类型,两个布尔值在各种场合的行为分别类似于数值0 和1,例外情况只有在转换为字符串时分别返回字符串"False" 或"True"。

1.2 numbers.Real对象

此类对象表示机器级的双精度浮点数。其所接受的取值范围和溢出处理将受制于底层的机器架构(以及C 或Java 实现)。

Python 不支持单精度浮点数;支持双精度浮点数的通常的理由是节省处理器和内存消耗。为什么不对二者都进行支持?因为双精度浮点数相对于单精度浮点数的这点节省与在Python 中使用对象的开销来说太过微不足道,因此没有理由包含两种浮点数而令该语言变得复杂,所以只支持了节省处理器和内存消耗的双精度浮点数。

1.3 numbers.Complex对象

此类对象以一对机器级的双精度浮点数来表示复数值。有关浮点数的附带规则对其同样有效。一个复数值z 的实部和虚部可通过只读属性z.real 和z.imag 来获取。

2. int, float, complex(具体实现类)

上的类都是抽象基类,接下来讲解基于上述抽象基类的具体实现类int, float, complex。
int 类型实现了numbers.Integral abstract base class

整数类型的按位运算也是常用的:首先按位运算只对整数有意义。计算按位运算的结果,就相当于使用无穷多个二进制符号位对二的补码执行操作。
二进制按位运算的优先级全都低于数字运算,但又高于比较运算;一元运算~ 具有与其他一元算术运算(+ and -) 相同的优先级。此表格是以优先级升序排序的按位运算列表:
在这里插入图片描述
注释:
(1) 负的移位数是非法的,会导致引发ValueError。
(2) 左移n 位等价于不带溢出检测地乘以pow(2, n)。
(3) 右移n 位等价于不带溢出检测地除以pow(2, n)。
(4) 使用带有至少一个额外符号扩展位的有限个二进制补码表示(有效位宽度为1 + max(x.bit_length(), y.bit_length()) 或以上)执行这些计算就足以获得相当于有无数个符号位时的同样结果。

int.bit_length()返回以二进制表示一个整数所需要的位数,不包括符号位和前面的零:

>>> n = -37
>>> bin(n)
'-0b100101'
>>> n.bit_length()
6

float 类型实现了numbers.Real abstract base class,需要注意的是该数据类型被称为近似的数据类型,不能精确存储数值,对于银行业务,若想精确存储数值需要使用decimal数据类型。

complex 类型实现了numbers.Complex abstract base class。

所有的数字类型(复数除外)都可以使用下面的方法
在这里插入图片描述
此处的divmod(x,y),我觉得这个方法是比较方便的,该方法的返回值是一个tuple.

参考文献:python官方文档——python语言参考(3.2章节)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习的贝塔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值