Python基础教程

004_Python运算符

Python运算符

Python运算符内容较多,是编程的基础。这些内容很难一次性掌握,以后会天天见,如果忘记了可以再来查。

Python主要有5种运算,内容如下。

  1. 算术运算符
  2. 比较运算符
  3. 赋值运算符
  4. 逻辑运算符
  5. 位运算符

算术运算符

算术运算符包括7种:加(+)、减(-)、乘(*)、除(/)、取模(%)、幂(**)、取整除(//)。

算术运算符主要用于数字运算,常见运算如下。

运算 结果
x + y xy 的和
x - y xy 的差
x * y xy 的乘积
x / y xy 的商
x // y xy 的商数
x % y x / y 的余数
-x x 取反
+x x 不变
abs(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 ** y xy 次幂

所有 numbers.Real 类型 (intfloat) 还包括下列运算:

运算 结果
math.trunc(x) x 截断为 Integral
round(x[, n]) x 舍入到 n 位小数,半数值会舍入到偶数。 如果省略 n,则默认为 0。
math.floor(x) <= x 的最大 Integral
math.ceil(x) >= x 的最小 Integral

其中取模与取整除使用不多,容易忘记,使用示例如下。

print(10 + 3)       # 13
print(10 - 3)       # 7
print(10 * 3)       # 30
print(10 / 3)       # 3.3333333333333335
print(10 % 3)       # 1
print(10//3)        # 3
print(int(10/3))    # 3
print(10**3)        # 1000

这里int()函数可以把一个小数(浮点数)转为整数与取整除意思相同,后面数据类型转换内容会讲到。

比较运算符

比较运算符即关系运算符。

在 Python 中有十种比较运算符。

运算 含义
< 严格小于
<= 小于或等于
> 严格大于
>= 大于或等于
== 等于
!= 不等于
is 对象标识
is not 否定的对象标识
in 如果在指定的序列中找到值返回 True,否则返回 False。
not in 如果在指定的序列中没有找到值返回 True,否则返回 False。

比较运算符很容易理解,与其他语言中表述相似,其中不等于的符号是"!=",这与有的语言不同。

身份运算is和is not属于比较运算。

成员检测运算in和not in也属于比较运算。

赋值运算符

Python中没有i++和++i,不同于C语言。

以下假设变量a为10,变量b为20。参考菜鸟Python网(https://www.runoob.com/python3/python3-data-type.html)。

运算符 描述 实例
= 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
+= 加法赋值运算符 c += a 等效于 c = c + a
-= 减法赋值运算符 c -= a 等效于 c = c - a
*= 乘法赋值运算符 c = a 等效于 c = c a
/= 除法赋值运算符 c /= a 等效于 c = c / a
%= 取模赋值运算符 c %= a 等效于 c = c % a
**= 幂赋值运算符 c = a 等效于 c = c a
//= 取整除赋值运算符 c //= a 等效于 c = c // a
:= 海象运算符,可在表达式内部为变量赋值。Python3.8 版本新增运算符 在这个示例中,赋值表达式可以避免调用 len() 两次

海象运算符(了解)

if (n := len(a)) > 10:
    print(f"List is too long ({n} elements, expected <= 10)")

逻辑运算符

逻辑运算符即布尔运算,and, or, not

运算 结果 注释
x or y if x is false, then y, else x (1)
x and y if x is false, then x, else y (2)
not x if x is false, then True, else False (3)

注释:

  1. 这是个短路运算符,因此只有在第一个参数为假值时才会对第二个参数求值。
  2. 这是个短路运算符,因此只有在第一个参数为真值时才会对第二个参数求值。
  3. not 的优先级比非布尔运算符低,因此 not a == b 会被解读为 not (a == b)a == not b 会引发语法错误。

位运算符

按位运算只对整数有意义。 计算按位运算的结果,就相当于使用无穷多个二进制符号位对二的补码执行操作。

运算 结果
x | y xy 按位
x ^ y xy 按位 异或
x & y xy 按位
x << n x 左移 n
x >> n x 右移 n
~x x 逐位取反

运算符优先级

下表对 Python 中运算符的优先顺序进行了总结,从最低优先级(最后绑定)到最高优先级(最先绑定)。 相同单元格内的运算符具有相同优先级。 除非句法显式地给出,否则运算符均指二元运算。 相同单元格内的运算符均从左至右分组(除了幂运算是从右至左分组)。

请注意比较、成员检测和标识号检测均为相同优先级,并具有如 比较运算 一节所描述的从左至右串连特性。

运算符 描述
:= 赋值表达式
lambda lambda 表达式
if -- else 条件表达式
or 布尔逻辑或 OR
and 布尔逻辑与 AND
not x 布尔逻辑非 NOT
in, not in, is, is not, <, <=, >, >=, !=, == 比较运算,包括成员检测和标识号检测
| 按位或 OR
^ 按位异或 XOR
& 按位与 AND
<<, >> 移位
+, - 加和减
*, @, /, //, % 乘,矩阵乘,除,整除,取余 5
+x, -x, ~x 正,负,按位非 NOT
** 乘方 6
await x await 表达式
x[index], x[index:index], x(arguments...), x.attribute 抽取,切片,调用,属性引用
(expressions...),[expressions...], {key: value...}, {expressions...} 绑定或加圆括号的表达式,列表显示,字典显示,集合显示

容易混淆的优先级程序可以用小括号来避免优先级错误。

更多内容请参考官方手册

https://docs.python.org/zh-cn/3/library/stdtypes.html#boolean-operations-and-or-not

优先级内容参考

https://docs.python.org/zh-cn/3/reference/expressions.html#operator-summary

这篇文章对您有用吗?

我们要如何帮助您?