一、数字类型
python中常用数值类型为整型, 浮点型和复数类型.
- 整型
- 浮点型
- 复数类型
- 复数包含实部和虚部,分别以一个浮点数表示。 要从一个复数
z
中提取这两个部分,可使用z.real
和z.imag
- 复数包含实部和虚部,分别以一个浮点数表示。 要从一个复数
此外,布尔值属于整数的子类型。 整数具有无限的精度。 浮点数通常使用 C 中的 double 来实现
数字是由数字字面值或内置函数与运算符的结果来创建的
- 不带修饰的整数字面值(包括十六进制、八进制和二进制数)会生成整数
- 包含小数点或幂运算符的数字字面值会生成浮点数
- 数字字面值末尾加上 'j' 或 'J' 会生成虚数(实部为零的复数),你可以将其与整数或浮点数相加来得到具有实部和虚部的复数
二、数字类型支持的运算
x + y
: 返回x
与y
的和
>>> 3.2 + 3
6.2
``
2. `x - y`: 返回`x`与`y`的差
```python
>>> 3.2 - 3 # 浮点数运算时不精确的
0.20000000000000018
x * y
: 返回x
与y
的乘积
>>> 3 * 2
6
>>> 3.1 * 3
9.3
x / y
: 返回x
和y
的商
>>> 5 / 3
1.6666666666666667
>>> 9 / 3
3.0
x // y
: 返回x
和y
的商数- 也称为整数除法。 结果值是一个整数,但结果的类型不一定是 int
- 运算结果总是向负无穷的方向舍入: 1//2 为 0, (-1)//2 为 -1, 1//(-2) 为 -1 而 (-1)//(-2) 为 0
>>> 3 //2
1
>>> 3.2 // 3
1.0
``
6. `x % y`: 返回`x / y`的余数
* 不可用于复数
```python
>>> 17 % 4
1
-x
:x
取相反数
>>> -10
-10
+x
:x
不变
>>> x = -10
>>> +x
-10
>>> -x
10
x ** y
:x
的y
次幂- Python 将 pow(0, 0) 和 0 ** 0 定义为 1,这是编程语言的普遍做法
>>> 2 ** 3
8
>>> 0 ** 0
1
abs(x)
: 返回x
的绝对值, 如果x
为复数, 返回模长
>>> abs(-10)
10
>>> abs(3 + 4j)
5.0
int(x)
: 将x
转换为整数- 从浮点数转换为整数会被舍入或是像在 C 语言中一样被截断
- 接受的数字字面值包括数码
0
到9
或任何等效的Unicode
字符(具有Nd
特征属性的代码点)
>>> int(2.3)
2
>>> int("2")
2
float(x)
: 将x
转换为浮点数- float 也接受字符串 "nan" 和附带可选前缀 "+" 或 "-" 的 "inf" 分别表示非数字 (NaN) 以及正或负无穷
- 接受的数字字面值包括数码
0
到9
或任何等效的Unicode
字符(具有 Nd 特征属性的代码点)
>>> float(3)
3.0
>>> float("3.2")
3.2
>>> float("nan")
nan
>>> float("+inf")
inf
>>> float("-inf")
-inf
complex(re, im)
: 一个带有实部 re 和虚部 im 的复数。im 默认为0- 接受的数字字面值包括数码 0 到 9 或任何等效的 Unicode 字符(具有 Nd 特征属性的代码点)
>>> complex(3, 4)
(3+4j)
>>> complex(2)
(2+0j)
>>> complex(3.3,2.1)
(3.3+2.1j)
c.conjugate()
: 复数 c 的共轭复数
>>> c = 3+4j
>>> c.conjugate()
(3-4j)
divmod(x, y)
: 返回(x // y, x % y)- 不可用于复数。 而应在适当条件下使用 abs() 转换为浮点数
>>> divmod(19, 5)
(3, 4)
pow(x, y)
:x
的y
次幂- Python 将 pow(0, 0) 和 0 ** 0 定义为 1,这是编程语言的普遍做法
>>> pow(2,3)
8
math.trunc(x)
: x 截断为整数
>>> math.trunc(3.14)
3
round(x, n)
:x
舍入到n
位小数,半数值会舍入到偶数。 如果省略n
,则默认为 0
>>> round(3.1415, 2)
3.14
>>> round(3.1415)
3
math.floor(x)
:<= x
的最大整数
>>> math.floor(3.11)
3
math.ceil(x)
:>= x
的最小整数
>>> math.ceil(3.4)
4
三、整数位运算
- 按位运算只对整数有意义
- 计算按位运算的结果,就相当于使用无穷多个二进制符号位对二的补码执行操作
- 二进制按位运算的优先级全都低于数字运算,但又高于比较运算
- 一元运算
~
具有与其他一元算术运算 (+
and-
) 相同的优先级
优先级升序排序
x | y
:x
和y
按位 或
>>> bin(2)
'0b10'
>>> bin(5)
'0b101'
>>> 2 | 5
7
x ^ y
:x
和y
按位 异或
>>> bin(2)
'0b10'
>>> bin(5)
'0b101'
>>> 2 ^ 5
7
x & y
:x
和y
按位 与
>>> bin(2)
'0b10'
>>> bin(5)
'0b101'
>>> 2 & 5
0
x << n
:x
左移n
位- 负的移位数是非法的,会导致引发 ValueError
- 左移
n
位等价于乘以pow(2, n)
>>> x = 3
>>> x << 2
12
>>> x * pow(2, 2)
12
x >> n
:x
右移n
位- 负的移位数是非法的,会导致引发 ValueError
- 向右移动n位等价于按pow(2,n)进行整数除法。
>>> x = 3
>>> x >> 2
0
>>> x // pow(2, 2)
0
~x
:x
逐位取反
>>> x =3
>>> ~x
-4