注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性。
Python有三种不同的数字类型:整数(int),浮点数(float)和复数(complex)。 值得注意的是,还有一种特殊的数字类型包含在整数int类型里,那就是布尔类型(bool)。
布尔类型虽然是整数类型的子类型,但是非常特殊,将另外单独讲。
1. 整数类型-int
Python中的整数int具有无限的精度。一般我们说到的整数都是指十进制整数,但Python中还有其它进制的整数,如二进制整数、八进制整数、十六进制整数等;除了十进制整数可以直接表示外,二进制、八进制和十六进制都需要在数值前面加上相应的前缀来表示。
十进制demical——无前缀。如338。
二进制binary——0b或0B前缀,如0b1011001。
八进制octal——0o或0O前缀,如0o557。
十六进制hexadecimal——0x或0X前缀,如0x16f。
十进制可以用int()、bin()、oct()和hex()等内置函数,实现与二进制、八进制和十六进制这些不同进制的整数的直接相互转换。
a = 16 # a是一个十进制整数。
bin(a) # 十进制整数转换为二进制。
Out[39]: '0b10000'
oct(a) # 十进制转换成八进制。
Out[40]: '0o20'
hex(a) # 十进制转换成十六进制。
Out[41]: '0x10'
更多进制转换的内容请参阅此前的文章:Python随笔3:二进制、八进制、十六进制与十进制整数之间的转换。
2. 浮点类型-float
浮点数通常使用C中的double来实现。与数学中实数的概念一致,是带有小数的数字。
IEEE规定,浮点数受到17位有效数字的限制,超过的要用科学记数法来表示。
由于计算机实现原理的先天不足,浮点数在计算中存储的只是近似值。浮点数的这个劣势也使得它不适合用作字典数据类型中的键。
浮点数使用科学计数法表示
使用字母e或E作为幂的符号,以10为基数,格式如下:
例如:4.3e-3的值为0.0043, 9.65E5的值为960000,0。
3. 复数类型-complex
与数学不同,在Python编程中,不用i,而用j或J来定义-1的平方根,以此为基础,构建数学体系。如在Python里,具体的复数表示是1 + 3j,而不是1 + 3i。
此外,跟在数学中一样,在Python中,复数只能作相等比较,不能作大小比较。
a + bj被称为复数,其中,a是实部,b是虚部。
对于复数z = 1 + 2j而言,z.real可以获得实部,z.imag可以获得虚部。这里要强调的是,无论实部、虚部是数学中的整数还是小数,在Python中,统一都是浮点数float类型,而不是整数int类型;换句话说,z.real、z.imag均为浮点数,而不是整数。
c1 = 1 + 2j
c1.imag #提取复数c1的虚部。
Out[15]: 2.0 # 虚部为浮点数。
c1.real #提取复数c1的实部。
Out[16]: 1.0 # 实部为浮点数。
c2 = complex(1, 2) #构建一个实部的值为1,虚部的值为2的复数。
c2
Out[24]: (1+2j)
4. 不同类型的数值之间的混合运算
不同类型之间的数值可以进行混合运算,生成结果为范围最宽的类型。
int < float < complex。
以上最前面的最窄,最后的最宽。如下例所示:
i = 7
f = 0.8
c = 1 + 9j
i + f + c
Out[28]: (8.8+9j) # 混合运算的结果是范围最宽的数字类型——复数。
虽然数值类型不同,但它们的“值”可以相等。如下例所示:
i = 7
f = 7.00
c = 7.0 + 0J
i == f == c
Out[32]: True # True表明三种数字类型的“值”是相等的。
5. 数值运算的常用函数
数值运算常用到以下函数:
abs():绝对值函数。如果运算对象是int或float,是计算绝对值;如果运算对象是复数,则计算复数的模长。
divmod(x, y):商余函数,计算x//y同时输出商和余数(x//y, x%y),以元组形式出现(商, 余数)。
pow(x, y):幂函数,求x的y次幂。
max()、min(),最大值最小值函数。
round(),对浮点数进行四舍五入操作。由于浮点数在计算机的存储存在误差,因此有时运算结果可能令人意外,如round(0.5) = 0。
int()、float()、complex()等函数,将不同的数字类型转换为相应的数字类型。
abs(-9.1)
Out[33]: 9.1
abs(3 + 4J) # 计算复数的模长。
Out[34]: 5.0
divmod(10, 3)
Out[35]: (3, 1) # 10除以3,商为3,余数为1。
pow(3, 2)
Out[36]: 9 # 3的2次方为9。
max(3, 5, 4, 2)
Out[37]: 5 # 求几个数中的最大值。
min(3, 5, 4, 2)
Out[38]: 2 # 求几个数中的最小值。
round(1.5)
Out[39]: 2 # 对1.5进行四舍五入。
a = round(0.5) # 四舍五入有失灵的情况。
a
Out[41]: 0
int(0.5) # 取0.5的整数部分。
Out[42]: 0
int(1.2) # 取1.2的整数部分。
Out[43]: 1
float(2) # 把int类型2转换为float类型。
Out[44]: 2.0
complex(3.5) # 把float类型3.5转换为复数类型。
Out[45]: (3.5+0j)
complex(9) # 把int类型9转换为复数类型。
Out[46]: (9+0j)
6. range函数
range()函数
函数原型:range([start=0], stop, [stepSize=1])。其范围是整数序列(..., -1000000,..., 0,1,2,3,...)。
参数含义:
start:计数从start开始,默认是从0开始。例如range(5)等价于range(0, 5)。可选参数。
stop:计数到end结束,但不包括end。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5 。必选参数。
stepSize:每次跳跃的间距,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)。可选参数。
range([start], stop, [stepSize])中的三个参数都必须是int型,当时float型时,系统会报错。
,range()函数是可以反向遍历的。当stepSize为负整数时,range()就反向遍历了。如:
for i in range(4,-1,-1):
print(i, end=' ')
<<<4 3 2 1 0
To be continued.