数字类型

阅读 69

Python 中常见的数字类型有:int(整型)、float(浮点型)和 complex(复数)。此外还有布尔型,用来表示真假,是整型的子类型。

数字类型来自数学中的数字,int 表示自然数,float 表示实数,complex 表示复数。

int 整型

Python 中的 int 类型就是自然数,表示没有小数的数字,而且没有最大值的限制。可以使用 int.bit_length 查看数字占用的字节数。

>>> a = 1
>>> a.bit_length()
1
>>> a = 10000
>>> a.bit_length()
14
>>> a = 999999999999999999999999999999999999999999999999999999999999999999999999999999
>>> a.bit_length()
260

一些常见的操作“加减乘除 ”,与数学上的定义大致相同。

运算结果
x + yxy 的和
x - yxy 的差
x * yxy 的乘积
x / yxy 的商
x // yxy 的商数
x % yx / y 的余数
-xx 取反
+xx 不变

加发、减法和乘法的定义是一致的。

>>> a = 1
>>> b = 2
>>> a + b
3
>>> a - b
-1
>>> b - a
1
>>> a * b
2

除法默认得到的结果是浮点数类型。

>>> a = 2
>>> b = 5
>>>
>>> a / b
0.4
>>> a / a
1.0

除法也可以整除(使用 // 符合)和取余(使用 % 符合)。

>>> a // b
0
>>> a % b
2
>>> b // a
2
>>> b % a
1

整型默认使用十进制表示,其他常用的有二进制(ob 开头)、八进制(0o 开头)、十六进制(0x 开头)。不同的进制之间只是表示方法不一样,相互之间可以转换,值是一样的。如果不了解进位制,请参考 进位制

>>> a = 15
>>> bin(a)
'0b1111'
>>> oct(a)
'0o17'
>>> hex(a)
'0xf'
>>> b = 0b1111
>>> c = 0o17
>>> d = 0xf
>>> a == b == c == d
True

(位运算)

这节内容不懂也没有关系,只是为了内容全面而作出的介绍,有所了解就可以了。

计算机是二进制的,所有内容都是以 0/1 来存储的,数字也是。比如 数字 1,在计算机中就是 1。数字 2,在计算机中就是 10。数字 3,在计算机中就是 11。比起数学运算,在计算机中直接移动位置,操作更快一些。比如 数字 3 ,在计算机中表示 11,向左移动一位就是 110,向右移动一位就是 1。可以使用左右移动表示,乘以 2,或者除以 2。

Python 内置了一些位运算操作。

运算结果
x | yxy 按位
x ^ yxy 按位 异或
x & yxy 按位
x << nx 左移 n
x >> nx 右移 n
~xx 逐位取反
>>> a = 18
>>> b = 6
>>> bin(a)
'0b10010'
>>> bin(b)
'0b110'
>>> a | b
22
>>> bin(a|b)
'0b10110'
>>> a ^ b
20
>>> bin(a^b)
'0b10100'
>>> a & b
2
>>> bin(a & b)
'0b10'
>>> a << 1
36
>>> a >> 1
9
>>> -a
-18
>>> bin(-a)
'-0b10010'

float 浮点型

浮点型类似于 C 语言中的 double。有小数的数字就是浮点型,即便小数是 0,也是浮点数。比如 1.1,2.0,10.09 都是浮点数。浮点数 2.0 和整数 2 只是值相等,却不是同一个值。

>>> a = 2
>>> b = 2.0
>>> type(a), type(b)
(<class 'int'>, <class 'float'>)
>>> a == b, a is b
(True, False)
>>> a == c, a is c
(True, True)

注:== 表示计算值相等,is 表示计算内存地址相同。

在计算机中浮点数由于表示存储方式不同,浮点数不能表达所有实数,而且计算的结果是不精确的。比如

>>> 0.7 + 0.1
0.7999999999999999

好在 Python 提供了 decimal 模块,能够做符合数学定义的数字操作。所有对数字敏感的操作都应使用 decimal 模块,尤其是设计金额的操作。

>>> import decimal
>>> decimal.Decimal('0.7') + decimal.Decimal('0.1')
Decimal('0.8')

Python 定义了一个特殊值 ‘inf’,表示最大值。 float('inf') 大于任何一个数字,float('-inf') 小于任何数字。

>>> 999999999999999999999999999999999999999999999999999999999999 > float('inf')
False

complex 复数

包含实数和虚数的数字,称为复数,其中的实部和虚部都是 float 类型。实际使用中很少用到复数。

>>> a = complex(1,2)
>>> a
(1+2j)
>>> b = complex(3,4)
>>> b
(3+4j)
>>> a + b
(4+6j)
>>> a -b
(-2-2j)
>>> a * b
(-5+10j)
>>> a / b
(0.44+0.08j)

bool 布尔类型

布尔类型,是以发明布尔代数的数学家乔治·布尔为名的。布尔类型只包含两个元素,True 和 False。bool 类型是 int 类型的子类型,因为 True 和 False 分别是 1 和 0 的别名。

>>> True == 1
True
>>> True + True
2
>>> False * 1
0

在 Python 中,所有的存在都表示真,比如 1,2,3,非空字符串(下一节字符串类型) 都表示真,所有的不存在都表示假,比如 0, None,空字符串。

>>> bool(1), bool(2), bool(3), bool('a')
(True, True, True, True)
>>> bool(0), bool(None), bool('')
(False, False, False)

布尔运算包括 >(大于)、 <(小于)、 ==(等于)、!=(不等于),布尔运算的结果就是布尔值。

>>> 1 < 2
True
>>> 2 < 1
False
>>> 1 > 3
False
>>> 1 == 1
True
>>> 1 != 2
True

布尔值之间可以进行运算,and(且)、or(或)、not(非),计算结果也是布尔值。

and(且),只有两个元素都是真的时候才返回真,否则返回假。

>>> True and True
True
>>> True and False
False
>>> False and False
False

or(或),两个元素有一个相同就返回真,否则返回假。

>>> True or True
True
>>> True or False
True
>>> False or False
False

not(非),返回当前元素的非值。

>>> not True
False
>>> not False
True

布尔元算可以链式求值,计算出确定的值就会结束计算,并不一定计算所有的值。 

>>> def p(a):
...     print(a)
...     return bool(a)
...
>>> p(1) and p(0) and p(2)
1
0
False

可以看到 2 并没有打印出来,因为计算到 p(0) 的时候,以及能确定表达式的值为假了。

内置函数

Python 支持函数式编程,同时内置了很多函数。这里介绍一些和数字相关的函数。熟记这些函数,对开发会有很大帮助的。

运算结果
abs(x)x 的绝对值或大小
bool(x)x 的布尔值
int(x)x 转换为整数
float(x)x 转换为浮点数
complex(re, im)一个带有实部 re 和虚部 im 的复数。im 默认为0。
c.conjugate()复数 c 的共轭
divmod(x, y)(x // y, x % y)
pow(x, y)xy 次幂
x ** yxy 次幂
bin(x)计算 x 的二进制
oct(x)计算 x 的八进制
hex(x)x 的十六进制