目录
数字类型
数字 (Number) 由数字文字 (Numeric literals) 创建,或作为内置函数和运算符的结果创建。Python 支持三种不同的数字类型 (Numeric Types):int
, float
, complex
。
另外,fractions 模块包括额外的数字类型 fractions.Fraction,提供对有理数算术的支持。decimal 模块包括额外的数字类型 decimal.Decimal,用于具有用户可定义精度的浮点数。
int
整数,也可称为整型,可以用十进制、八进制、十六进制表示。py3 的整型 int 相当于 py2 的长整型 long,可以存放任意大小的整数,不存在溢出问题,所以 py3 不再有 long 类型。
bool(布尔)是 int 的子类型。
>>> num = 255 # Decimal
>>> num
255
>>> num = 0o255 # Oct
>>> num
173
>>> num = 0x255 # Hex
>>> num
597
>>> num = True # bool
>>> num
True
float
浮点数,或叫浮点型,由整数和小数部分组成,也可以使用科学计数法表示(2.5e2 = 2.5 x 10^2 = 250)
Python 的浮点数通常使用C语言中的 double 实现。
sys.float_info 提供了机器浮点数的精度和内部表示的信息。
>>> num = 2.55
>>> num
2.55
>>> num = -2.55e10
>>> num
-25500000000.0
>>> import sys
>>> sys.float_info
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
complex
复数,由实部和虚部构成,表示为 a + bj,或 complex(a,b) , 实部a和虚部b都是浮点数。要从复数 z 中提取实部和虚部,可以使用 z.real 和 z.imag。
>>> z = 2 + 3j
>>> z.real
2.0
>>> z.imag
3.0
数字类型转换
构造函数 int()
, float()
, complex()
可用于生成特定类型的数字。
转换成 int
class int
([x]) 返回由数字或字符串 x 构造的整数对象,如果没有给出参数,则返回 0。
class int
(x, base=10) 如果 x 不是数字或给定了 base,那么 x 必须是字符串、字节或字节数组对象,表示以 base 为基数的整数。base 表示进制,可以是2, 8, 10, 16。
>>> int()
0
>>> int(2.22) # float -> int
2
>>> int('10') # str -> int (base=10)
10
>>> int('10', 16) # str -> int (base=16)
16
转化成 float
class float
([x]) 返回由数字或字符串 x 构造的浮点数。参数也可以是表示 NaN(非数字)或正负无穷大的字符串。
>>> float(2)
2.0
>>> float('2.22')
2.22
>>> float('nan') # not-a-number
nan
>>> float('inf') # positive infinity
inf
>>> float('-inf') # negative infinity
-inf
转化为 complex
class complex
([real[, imag]]) 返回值为 real + imag*1j 的复数或将字符串或数字转换为复数。如果第一个参数是一个字符串,它将被解释为一个复数,并且必须在没有第二个参数的情况下调用该函数。
>>> complex(2, 3)
(2+3j)
>>> complex('2+3j') # the string must not contain whitespace around the central + or - operator
(2+3j)
>>> complex(2+3j)
(2+3j)
数字运算
python 解释器可以充当一个简单计算器,它会根据输入的表达式,输出对应的值。
>>> 1 + 1
2
>>> 2 + 2 * 2
6
>>> (2 + 2) * 2
8
>>> 6 / 2 # classic division returns a float
3.0
>>> 6 // 2 # floor division discards the fractional part
3
>>> 5 ** 2 # 5 squared
25
>>> 2 ** 7 # 2 to the power of 7
128
在交互模式下,若没有为表达式赋值,那么输出的结果会被分配给变量 _,这样继续计算会更容易些,例如:
>>> 2 + 2
4
>>> _ * 2
8
python 文档中关于变量_的注意点:
This variable should be treated as read-only by the user. Don’t explicitly assign a value to it — you would create an independent local variable with the same name masking the built-in variable with its magic behavior.
直译:用户应将此变量视为只读。不要显式地给它赋值——你会创建一个同名的独立局部变量,用它的魔法行为屏蔽内置变量。
不信?试试:
>>> _ = 5
>>> 2 + 2
4
>>> _ * 2
10
算数运算符
运算符 | 描述 | 表达式 (a = 9,b = 2) | 运算结果 |
---|---|---|---|
+ | 加 | a + b | 11 |
- | 减 | a - b | 7 |
* | 乘 | a * b | 18 |
/ | 除 | a / b | 4.5 |
% | 取余 | a % b | 1 |
** | 幂 | a ** b | 81 |
// | 取整除(Floor) | a // b | 4 |
注意:
- 不同类型的数混合运算时,会将整数转化为浮点数,结果也是浮点数。
-
与 py2 不同,py3 中对任何类型的操作数进行除法 / 运算,结果都是浮点数,即使整除,结果也会是浮点数。如果想丢弃小数部分,可以使用 // 运算符(floor division)。
-
// 运算中只是丢弃小数部分,并不是说一定返回整数,结合第1点,如果操作数是浮点数,那么结果也会是浮点数,只是丢弃了小数部分,比如 9 // 2 = 4,9.0 // 2 = 4.0。
赋值运算符
运算符 | 描述 | 表达式 (a = 9,b = 2, c = 10) | c |
---|---|---|---|
= | 赋值 | c = a + b | 11 |
+= | 加法赋值 | c += a 等效于 c = c + a | 19 |
-= | 减法赋值 | c -= a 等效于 c = c - a | 1 |
*= | 乘法赋值 | c *= a 等效于 c = c * a | 90 |
/= | 除法赋值 | c /= a 等效于 c = c / a | 1.1111111111111112 |
%= | 取模赋值 | c %= a 等效于 c = c % a | 1 |
**= | 幂赋值 | c **= a 等效于 c = c ** a | 1000000000 |
//= | 取整除赋值 | c //= a 等效于 c = c // a | 1 |
比较运算符
运算符 | 描述 | 表达式 (a = 9,b = 2) | 运算结果 |
---|---|---|---|
== | 等于 | a == b | False |
!= | 不等于 | a != b | True |
> | 大于 | a > b | True |
< | 小于 | a < b | False |
>= | 大于等于 | a >= b | True |
<= | 小于等于 | a <= b | False |
位运算符
位运算是将两个数字按二进制位进行运算。
运算符 | 描述 |
---|---|
& | 与:两位同时为1,结果才为1,否则为0 |
| | 或:两位有一个为1,结果则为1 |
^ | 异或:两位不相同,结果为1 |
~ | 取反:对数据的每个二进制位取反 |
<< | 左移:运算数的各二进位全部左移若干位,<< 右边的数字指定移动的位数,高位丢弃,低位补0 |
>> | 右移:运算数的各二进位全部右移若干位,>> 右边的数字指定移动的位数,高位补0,低位丢弃 |
例如变量 a = 9,b = 2:
二进制 | 十进制 | |
---|---|---|
a | 1001 | 9 |
b | 0010 | 2 |
a & b | 0000 | 0 |
a | b | 1011 | 11 |
a ^ b | 1011 | 11 |
~a | 1111 0110 | -10 |
a << b | 0010 0100 | 36 |
a >> b | 0010 | 2 |
逻辑运算符
逻辑运算符一般操作的是 bool 类型。
运算符 | 描述 | 表达式 (a = True,b = False) | 结果 |
---|---|---|---|
and | 逻辑与:两个条件都满足时,结果为 True | a and b | False |
or | 逻辑或:两个条件中任一个满足时,结果为 True | a or b | True |
not | 逻辑非 | not a | False |
成员运算符
运算符 | 表达式 (a = 2,b = [2, 3]) | 描述 | 结果 |
---|---|---|---|
in | a in b | 如果对象b包含对象a,返回True,否则返回False | True |
not in | a not in b | 如果对象b不包含对象a,返回True,否则返回False | False |
身份运算符
运算符 | 描述 |
---|---|
is | 如果两个变量引用自同一个对象,返回True,否则返回False。 |
is not | 如果两个变量引用的不是同一个对象,返回True,否则返回False |
注意:is 和 == 不一样,a is b 类似于 id(a) == id(b),用于判断两个变量是否引用自同一个对象,而 == 用于判断两个变量的值是否相等。
is 其实就相当于C语言中的指针比较:"(void*) &a == (void*) &b"。
在 python 中,一切都是有地址的对象,包括数字,而数字是不可变数据类型,这意味着改变变量存储的数值时,不是在已有的内存上做修改,而是为新的数字重新分配内存空间。如下,id() 函数可以获取对象的内存地址,两次给 num 赋值后,num 指向的内存地址发生了变化。
>>> num = 22
>>> id(num)
2009505950672
>>> num = 33
>>> id(num)
2009505951024
运算符优先级
以下按优先级由高到低列出:
运算符 | 描述 |
---|---|
** | 算数运算符:指数 |
~ + - | 位运算符:取反、一元加(正)、一元减(负) |
* / % // | 算数运算符:乘、除、求余、取整除 |
+ - | 算数运算符:加、减 |
>> << | 位运算符:右移,左移 |
& | 位运算符:与 |
^ | | 位运算符:异或、或 |
<= < > >= | 比较运算符 |
== != | 比较运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |
记不清楚不要紧,我们可以用括号用来分组,这样代码可读性也更高。
>>> 1 + 2 << 3
24
>>> (1 + 2) << 3
24
数学函数
内置函数
python 内置函数一览表:Built-in Functions,其中与数学有关的有:
函数 | 描述 | 实例 |
---|---|---|
abs(x) | 返回 x 的绝对值 | abs(-2) 返回 2, abs(-2.0) 返回 2.0 |
max(x1,x2,...) | 返回给定参数的最大值 | max(1, 2) 返回2,max(1, 2, 3) 返回3 |
min(x1,x2,...) | 返回给定参数的最小值 | min(1, 2) 返回1,min(1, 2, 3) 返回1 |
oct(x) | 将 x 转换为以“0o”为前缀的八进制字符串 | oct(10) 返回 '0o12' |
pow(base, exp) | 等效于使用幂运算符:base**exp。 | pow(2, 3) 返回 8 |
round(x[, ndigits]) | 返回浮点数x四舍五入的值,若给出ndigits,则四舍五入到 ndigits 精度 | round(5.555) 返回 6 round(5.555, 1) 返回 5.6 |
sum(iterable, /, start=0) | 从 start 开始对 iterable 的各项求和并返回总数 | sum((1, 2, 3)) 返回 6 |
math 模块
python 中数学运算常用的函数基本都在 math
模块中。math 模块中的函数不能用于复数,如需支持复数,可使用 cmath
模块中的同名函数。
查看 math 模块的内容:
>>> import math
>>> dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
>>> help(math)