python学习笔记:python数字

一、数字类型分类

数字提供了标量存储和直接访问,它是不可更改类型,也就是说变更数字的值会产生新的对象。python的对象模型与常规对象模型有些不同,对数字对象的更新,实际上是生成了一个新的数值对象,并得到它的引用。

在学习编程的过程中,我们一直接受这样的教育:变量就像一个盒子,里面装着变量的值。在python中,变量更像一个指针指向装变量值的盒子。对于不可改变类型来说,你无法改变盒子的内容,但可以将指针指向一个新盒子。每次将另外的数字赋值给变量的时候,实际上是创建了一个新的对象,并将它赋值给变量。

按照python的规则,你无法真正删除一个数字对象,你仅仅是不再使用它而已。如果你确实想删除一个数值对象的引用,使用del语句即可。

1. 整型

整型的数字可以分为

  • 布尔型:布尔型其实是整型的子类型,布尔型数据只有两个取值:True和False,分别对应整型的1和0。每一个Python对象都天生具有布尔值(True或False),进而可用于布尔测试(如用在if、while中)。以下对象的布尔值都是False:NoneFalse(布尔型)、(整型0)、0L(长整型0)、0.0(浮点型0)、0.0+0.0j(复数0)、''(空字符串)、[](空列表)、()(空元组)、{}(空字典)、用户自定义的类实例,该类定义了方法 __nonzero__() 或 __len__(),并且这些方法返回0或False。除开上述对象之外的所有其他对象的布尔值都为True。
  • 标准整型:python标准整型类型等价于C的(有符号)长整型,取值的范围与系统的最大整型一致(如32位机器上的整型是32位,64位机器上的整型是64位),可以表示的整数范围在[-sys.maxint-1, sys.maxint]之间。整型字面值的表示方法有3种:十进制(常用)、八进制(以数字“0”开头)和十六进制(以“0x”或“0X”开头)。
  • 长整型:C或者其他编译型语言的长整形的取值范围是32位或者64位,python的长整型类型能表达的数值仅仅与你的机器支持的(虚拟)内存大小相关,python能表达无限大的整型。在一个整型后面加个L,表示这个整型是长整型。

2. 双精度浮点型

双精度浮点数:浮点型类似于C中的双精度浮点型(double),其精度信息和内部表示可以从sys.float_info中获得。浮点型字面值可以用十进制或科学计数法表示,在科学计数法中,e或E代表10,+(可以省略)或 - 表示指数的正负。

3. 复数

复数:复数的实部real和虚部imag都是浮点型。复数对象拥有数据属性,分别为该复数的实部和虚部,复数还拥有conjugate方法,返回该复数对象的共轭复数对象。

二、数字类型操作符

python使用数字类型强制转换的方法来解决数字类型不一致的问题,也就是强制将一个操作数转换为同另一个操作数相同的数据类型。但是这种操作不是随意进行的,它遵循以下的基本规则:

整型转换为浮点型,非复数转换为复数。类似coerce()函数的描述:

  • 如果有一个操作数是复数,另一个操作数被转换为复数;
  • 否则,如果有一个操作数是浮点型,另一个操作数被转换为浮点型;
  • 否则,如果有一个操作数是长整型,另一个操作数被转换为长整形;
  • 否则,两者必然都是普通整型,不需要类型转换。

1. 算术操作符

除法

  1. 传统除法:如果是整型除法,舍去小数部分,返回一个整型(地板除),如果操作数之一是浮点数,执行真正的除法。
  2. 真正除法:除法运算总是返回真实的商,不管操作数是整型还是浮点型。要引入from __future__ import division指令。在真正除法中,地板除用新的操作符//,这个运算符除法不管操作数为何种数值类型,总是舍去小数部分。

幂运算

幂运算操作符比其左侧操作数的一元操作符优先级高,比其右侧操作数的一元操作符的优先级低。

>>> 3 ** 2
9
>>> -3 ** 2
-9
>>> (-3) ** 2
9
>>> 8 ** -2
0.015625

还需要注意的是:指数操作符的优先级高于连接实部和虚部的+号操作。

>>> 0 + 1j ** 2
(-1+0j)
>>> 1 + 1j ** 2
0j
>>> (1 + 1j) ** 2
2j

三、数字类型内建函数与工厂函数

1. 标准类型函数

前面介绍了cmp(),str(),type()内建函数,这些函数可以用于所有的标准类型。当然对于数字对象来说也是可以的。

2. 数字类型函数

python现在拥有一些针对数字类型的内建函数,他们是

转换工厂函数

函数int()、long()、float()、complex()和bool()用来将其他数值转换为相应的数值类型。其中bool()用来将整型值1和0,转换为标准布尔值True和False。所谓工厂函数就是指这些内建函数都是类对象,当你调用它们时,实际上创建了一个类实例。

功能函数

python有五个内建函数用于数值运算:abs()、coerce()、divmod()、pow()、round()。函数coerce()返回一个包含类型转换完毕的两个数值的元组,具体的转换规则,前面已经说过了。divmod()内建函数把除法和取余运算结合起来,返回一个包含商和余数的元组,这里的除法是地板除。pow()和双星号(**)操作符都可以进行指数运算。pow有第三个参数,功能类似pow(x, y) % z,但是pow的性能更好。

内建函数round用于对浮点数进行四舍五入,它有一个可选的小数位数参数,默认返回与第一个参数最接近的整数(但仍然是浮点数)。第二个参数告诉round函数将结果精确到小数点后指定位数。下面对比一下round()、int()、floor()这三个函数。

int()函数直接截去小数部分,返回值为整型。

floor()得到最接近原数但小于原数的整型,返回的是浮点数。

round()得到最接近原数的整型,返回的是浮点数。

3. 仅用于整型的函数

进制转换函数

oct()和hex()这两个函数都接受一个整型(任意进制的)对象,并返回一个对应值的字符串对象。

ASCII转换函数

函数chr()接受一个单字节整型值(0~255),返回一个字符串,其值为对应的字符。

函数ord()接受一个字符,返回其对应的整型值。

  

上一篇:linux0.11内核源码剖析:第一篇 内存管理、memory.c【转】


下一篇:WorldWind源码剖析系列:图层管理器按钮类LayerManagerButton和菜单条类MenuBar