目录
数字类型
int
float
complex
数字类型转换
转换成 int
转化成 float
转化为 complex
数字运算
算数运算符
赋值运算符
比较运算符
位运算符
逻辑运算符
成员运算符?
身份运算符
运算符优先级
数学函数
内置函数
math 模块
数字类型
数字 (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)
欢迎关注我的知乎?安暖 - 知乎 (zhihu.com),你问,我必答😎?
|