数字
数字类型
在前一章讲过,数字是不可更改的类型,也就是说变更数字会生成新的对象。
python中支持多种数字类型:整型、长整型、布尔型、双精度浮点型、十进制浮点型和复数。
- 如何创建数字对象?
- x=1; y=2.2
- 如何更新数字对象?
- 因为数字是不可更改的类型,所以实际上是无法更新该数字对象的值,所谓的更新是指重新赋值时生成的新的数值对象,并得到它的引用。
- 如何删除数字对象?
- 数字对象实际是无法删除的,能删除的仅仅是所创建的引用(通过del语句)。
整型
python中可以表示整数的类型包括:布尔型、整型、长整型(长整型所表示的数值大小远超过C语言中的长整型)。
- 布尔型:True(1)/False(0)
- 标准整数类型:在32位机器上的范围通常是-231 ~ 231 -1。例如0101、10、1024、-1、0x80。
- 长整型:在python中,长整型所取值的范围是根据机器支持的虚拟内存的大小决定的。例如2997924581、16348L。
双精度浮点数
类似于其他语言中的double类型,可以用直接的十进制或者科学计数法表示。浮点数通常包含一个小数点和一个可选的e表示指数。例如0.0、1.5、4.2e25、5.8E-10。
复数
复习一下数学中的概念,复数是由一个实数和一个虚数组成,一个复数是一对有序浮点数(x,y)表示为x+yj。使用type函数查看时为<class ‘complex’>。
- 在python中虚数需要有后缀j或者J。
- 对于复数对象,python中几种内建函数:
- real:返回实部
- imag:返回虚部
- conjugate():返回该复数的共轭复数(实部相等,虚部互为相反数)
num=2+3j
real=num.real #2
imag=num.imag #3
conj=num.conjugate() #2-3j
运算符
由于数字对象有不同的类型,所以python会对不同类型数字使用不同类型的运算,这是一种重载思想的体现。
但当两个数字对象类型不同时,例如浮点数与整数进行运算,python将会强制的将两个数转为同一类型再进行运算。这个转换遵循以下规则:
- 如果有一个操作数为复数,则另一个数转为复数。
- 否则,如果一个操作数为浮点数,则另一个数转为浮点数。
- 否则,如果一个操作数为长整型,则另一个数转为长整型。
- 否则,两者必然都是普通整数,无需转换。
python中大多数运算符与其他语言中相等,其中有两个运算符需要注意:
- 幂运算**:在Python中幂运算通过** 符号来进行,例如2**3=8。幂运算符比其左侧操作数的一元运算符优先级高,比其右侧低。
- 除法运算:在C/C++中,除法运算/通常表示向下取证(地板除),即5/2=2。而在python中除法与地板除是两种运算:
- /表示真正的除法,即5/2=2.5
- //表示地板除,即5/2=2
- 在python解释器中,可以通过设置Qdivision_style来改变是否启用这种新的除法运算方式(默认开启)。
- python中同样支持位运算:
- ~按位取反,按位与&,按位或|,按位异或^,左移<<,右移>>。
数字对象的内建函数
在上一节所学习的str()、cmp()、type()适用于所有标准类型。对于python数字对象,有以下几种内建函数
- 转换函数
- int()
- complex()
- long()
- bool()
- float()
- 功能函数
- abs():求绝对值
- coerce():手动的类型转换函数,输入两个不同类型的参数,将返回包含转换完成的两个数的元组,转换遵循上一小节的规定。
- divmod():除法+求余,所返回的结果包含商和余数组成的元组。
- pow():幂运算,与C++中类似
- round():对浮点数进行四舍五入,第一个参数为浮点数,第二个参数为小数位数(可选)。
- 进制转换函数:仅整数可用
- oct():转8进制
- hex():转16进制
- ASCII码转换函数:
- ord():字符到整数
- chr():整数到字符
数字对象相关的模块
- decimal:十进制浮点数
- array:高效数值数组
- math:数学运算函数
- operator:数字运算符的函数实现,例如sub()
- random:多种伪随机数生成器关于random的更多用法
- randrange()
- random()
- random.uniform(1.50):随机浮点数
- random.randint(1,50):随机整数
- random.choice(“str”):随机字符
下一章将学习python中的容器对象及其使用。第四章