(1)一些较容易搞错的运算符
一般简单的如加减乘除之类的运算符就不写了,这里主要列些一些容易搞错或忘记的运算符。运算符不仅仅只有号,有一些英文单词如 in, and 之类,也是运算符,并不是语句。
运算符 | 简述 | 举例或说明 | |
---|---|---|---|
数字操作 | |||
/ | 在Python3中,默认为浮点数除法;在Python2中,若除数和被除数都是整数,则默认为截断除法。若要在Python2中也为浮点数除法,需要使用: from __future__ import division | 2/3 # Python3 中结果为:0.6666666666666666 2/3 # Python2 中结果为:0 | |
// | 截断除法(仅保留整数部分),又叫“地板除法”。 | 2//3 # 结果为 0 | |
% | 取模(浮点数也可以做取模运算)。 | 8 % 3 # 结果为 2 1.2 % 0.5 # 结果为 0.2 | |
** | 乘方(次方)运算。 | 2**3 # 结果为 8 | |
-x | 一元减法。 | x=3; x=-y # 结果为 x=-3 | |
+x | 一元加法(一般用不到)。 | x=+3 # 结果为 x=3 | |
位操作 | |||
& | 按位与。 | 0b111 & 0b011 # 结果为 3 | |
| | 按位或。 | 0b010 & 0b001 # 结果为 3 | |
^ | 按位异或。 | 0b001 & 0b011 # 结果为 2 | |
~ | 按位求反。 | ~1 # 结果为 -2(这个涉及补码知识) | |
<< | 左移 | 1<<2 # 结果为 4 | |
>> | 右移 | 1>>2 # 结果为 0 | |
布尔运算 | |||
and | 逻辑与(短路求值) | 略 | |
or | 逻辑或(短路求值) | 略 | |
not | 逻辑非 | 略 | |
其他 | |||
. | 属性运算符 | 略 | |
() | 函数调用运算符 | f=some_fun # 假设some_fun为某个已定义函数 f() # 即调用some_fun函数 |
(2)运算符优先级
下表中运算符优先级从高到低。
运算符 | 说明 |
---|---|
(…), […], {…} | 创建元组、列表、字典 |
s[i], s[i:j] | 索引和切片 |
. | 属性运算符 |
() | 函数调用运算符 |
+x, -x, ~x | 一元操作符(一元加法、一元减法、按位取反) |
** | 乘方(次方)运算 |
*, /, //, % | 乘法、除法、截断除法、取模 |
+, – | 加法、减法 |
<<, >> | 移位 |
& | 按位与 |
^ | 按位异或 |
| | 按位或 |
<, <=, >, >=, ==, !=, is, is not, in, not in | 关系运算符、身份检查、成员检查 |
not | 逻辑非 |
and | 逻辑与 |
or | 逻辑或 |
lambda args: exrp | 匿名函数 |
(3)math模块
前面的运算符仅能做一些最基础的运算,如果需要进一步的标准数学运算函数,需要导入math模块。 math模块所有函数的返回值都是浮点数,所有三角函数都默认使用弧度。math模块不支持复数运算,若要运算复数,需要导入cmath模块。
字符串方法 | 简述 | 举例或说明 | |
---|---|---|---|
属性 | |||
pi | 数学常数π | math.pi # 结果为 3.141592653589793 | |
e | 数学常数e | math.e # 结果为 2.718281828459045 | |
tau | Python3.6新增,数学常数2π | math.tau # 结果为 6.283185307179586 | |
inf | Python3.5新增,正无穷大 | 略 | |
nan | Python3.5新增,浮点数的NaN,相当于float(‘nan’) | 略 | |
舍入运算 | |||
ceil(x) | 返回x的向上舍入值 | math.ceil(2.1) # 结果为 3 math.ceil(-2.1) # 结果为 -2 | |
floor(x) | 返回x的向下舍入值 | math.floor(2.8) # 结果为 2 math.floor(-2.8) # 结果为 -3 | |
trunc(x) | 将x截为最接近于零的整数 | math.floor(2.8) # 结果为 2 math.floor(-2.8) # 结果为 -2 | |
一般数学计算 | |||
fabs(x) | 返回x的绝对值,其效果同内置函数abs() | math.fabs(-2.8) # 结果为 2.8 | |
fsum(s) | 返回可迭代序列s中的和,其效果比内置函数sum()更精确 | math.fsum([1,1e100,-1e100]) # 结果为 1.0 sum([1,1e100,-1e100]) # 结果为 0.0(内置函数计算) | |
fmod(x, y) | 返回x % y,浮点数亦可作取模运算 | math.fmod(8,3) # 结果为 2.0 | |
pow(x, y) | 乘方运算,返回x**y | math.pow(2,3) # 结果为 8.0 | |
sqrt(x) | 返回x的平方根 | math.sqrt(4) # 结果为 2.0 | |
hypot(x, y) | 返回坐标点(x,y)到原点的几何距离,即sqrt(x*x + y*y) | math.hypot(3,4) # 结果为 5.0 | |
factorial(x) | 返回x的阶乘 | math.factorial(4) # 结果为 24 | |
copysign(x, y) | 返回与y具有相同符号的x | math.copysign(1,-3) # 结果为 -1.0 | |
gcd(x, y) | Python3.5新增,返回x与y的最大公约数(Greatest Common Divisor) | math.gcd(6,8) # 结果为 2 | |
exp(x) | 返回 ex值 | math.exp(1) # 结果为 2.718281828459045 | |
expm1(x) | Python3.2新增,返回exp(x)-1, | math.expm1(1) # 结果为 1.718281828459045 | |
ldexp(x, i) | 返回 x * 2i | math.ldexp(4, 10) # 结果为 4096.0 | |
log(x [,base]) | 返回指定base为底的x的对数,base默认为自然常数math.e | math.log(math.e) # 结果为 1.0 math.log(100,10) # 结果为 2.0 | |
log10(x) | 返回以10为底的x的对数 | math.log10(100) # 结果为 2.0 | |
log2(x) | Python3.3新增, | math.log2(8) # 结果为 3.0 | |
log1p(x) | 返回1+x的自然对数 | math.log1p(math.e-1) # 结果为 1.0 | |
erf(x) | Python3.2新增,返回x的误差函数(统计学公式) | math.erf(1) # 结果为 0.8427007929497149 | |
erfc(x) | Python3.2新增,返回x的互补误差函数(统计学公式) | math.erfc(1) # 结果为 0.1572992070502851 | |
gamma() | Python3.2新增,返回x的伽玛函数(概率学公式) | 略 | |
lgamma() | Python3.2新增,返回x的伽玛函数的绝对值的自然对数(概率学公式) | 略 | |
三角函数 | |||
sin(x) | 正弦函数 | math.sin(math.pi/2) # 结果为 1.0 | |
cos(x) | 余弦函数 | math.cos(math.pi/4) # 结果为 0.7071067811865476 | |
tan(x) | 正切函数 | math.tan(math.pi/3) # 结果为 1.7320508075688767 | |
asin(x) | 反正弦函数 | math.asin(1.0) # 结果为 1.5707963267948966 | |
acos(x) | 反余弦函数 | math.acos(1.0) # 结果为 0.0 | |
atan(x) | 反正切函数 | math.atan(inf) # 结果为 1.5707963267948966 | |
atan2(y, x) | 返回atan(y/x) | math.atan2(2,2) # 结果为 0.7853981633974483 | |
degrees(x) | 将x从弧度转换为角度 | math.degrees(math.pi/2) # 结果为 90.0 | |
radians(x) | 将x从角度转换为弧度 | math.radians(180) # 结果为 3.141592653589793 | |
双曲函数 | |||
sinh(x) | 双曲正弦函数 | 略 | |
cosh(x) | 双曲余弦函数 | 略 | |
tanh(x) | 双曲正切函数 | 略 | |
asinh(x) | 反双曲正弦函数 | 略 | |
acosh(x) | 反双曲余弦函数 | 略 | |
atanh(x) | 反双曲正切函数 | 略 | |
其他 | |||
modf(x) | 返回元组形式的x的小数和整数部分 | math.modf(3.14) # 结果为 (0.14000000000000012, 3.0) | |
frexp(x) | 返回元组形式的x的正浮点尾数和浮点指数 | math.frexp(100.0) # 结果为 (0.78125, 7) | |
remainder(x, y) | Python3.7新增,返回x类似浮点数结构的尾数,计算方式为:x-n**y,其中n为最佳接近x/y的整数。 | math.remainder(10,1) # 结果为 0.0 | |
isinf(x) | 如果x是正无穷大,则返回True | math.isinf(inf) # 结果为 True | |
isfinite() | Python3.2新增,如果x不是无穷大的数,则返回True | math.isfinite(123) # 结果为 True | |
isnan(x) | 如果x是浮点数的NaN(Not a Number),则返回True | math.isnan(float(‘nan’)) # 结果为 True | |
isclose(a, b) | Python3.新增,如果a和b足够接近,则返回True | math.isclose(0.1,0.1000000001) # 结果为 True |
(4)表达式与语句
表达式与语句的根本区别在于:语句没有值,而表达式有值。
● 赋值语句
由于赋值语句是“语句”故其没有值,不能像C语言那样使用诸如 if(a=3)之类的形式(C语言的赋值语句有值,值为赋值内容),但Python的赋值语句支持链式赋值、增量赋值、序列解包赋值等多种形式。
x = 1 # 普通赋值 x = y = 1 # 链式赋值 x += 1 # 增量赋值(使用增量运算符 += ) x,y,z = (1,2,3) # 序列解包赋值(将元组中的3个值分别赋给x,y,z x,y = y,x # 交换x和y的值
● del语句
del语句(del既不是内置函数,也不是运算符,是语句)可以移除一个变量名对实例的引用,并且也会移除这个变量名本身。 但是del不会真正在内存中删除实例,删除实例的工作是由“垃圾收集器”做的,当某个实例的被引用计数减到0时,垃圾收集器会真正删除这个实例并释放其占用的内存。
# ---------- del 示例1:---------- x = 1 del x # 之后x就不可用了 x = 'Hello' # ---------- del 示例2:---------- y = x del x # 虽然解除了x对'Hello'的引用,但由于y还指向'Hello',故'Hello'其实还在 print(y) # 结果为 'Hello'
● 条件表达式
条件表达式和C语言中条件赋值语法大致相同,格式如下:
x = (布尔表达式) ? a: b
含义为:当布尔表达式的值为True,则将a赋值给x;否则,将b赋值给x。 条件表达式在“列表推导”和“生成器表达式”中比较有用。