运算符

运算符是一些特殊的符号,他们可以进行诸如“加减”(+ 和 -)或者“比较两个数的大小”(< 和 >)以及逻辑运算等运算。

Python 的运算符主要包括算术运算符、赋值运算符、比较(关系)运算符、逻辑运算符和位运算符。

使用运算符将不同类型的数据按照一定的规则连接起来的式子,称为表达式。

算术运算符#

算术运算符是处理四则运算的符号,在数字的处理中应用得最多。

算术运算符
运算符 说明 示例表达式 结果
+ 加 43.3 + 10 53.3
- 减 43.3 - 10 33.3
* 乘 43.3 * 10 433.0
/ 除,其结果总是为浮点数
(注意除数不能为零)
43 / 10
43.3 / 10
4.3
4.33
% 求余,即返回除法的余数 43 % 10
43.3 % 10
-43 % 10
43 % -10
3
3.3
7
-7
// 整除,即返回商的整数部分
(注意除数不能为零)
43 // 10
43.3 // 10
-43 // 10
4
4.0
-5
** 幂,即返回 x 的 y 次方 3 ** 2
3.0 ** 2
9
9.0

示例:已知一个三角形三边的长度分别为 $a = 3.3, b = 6.2, c = 4.2$,求该三角形的面积 $S$。

根据三边长求三角形面积的公式为:

$$p={\frac{a+b+c}{2}}$$
$$S={\sqrt{p(p-a)(p-b)(p-c)}}$$
a = 3.3
b = 6.2
c = 4.2
p = (a + b + c) / 2
s = (p*(p-a)*(p-b)*(p-c)) ** 0.5
print(s)  # 6.472008478826334

赋值运算符#

赋值运算符主要用来为变量等赋值。除了 = 外,Python 还支持像 +=、-= 这样的复合赋值运算符。

赋值运算符
运算符 说明 示例 展开形式
= 简单的赋值运算 x = y x = y
+= 加赋值 x += y x = x + y
-= 减赋值 x -= y x = x - y
*= 乘赋值 x *= y x = x * y
/= 除赋值 x /= y x = x / y
%= 取余数赋值 x %= y x = x % y
**= 幂赋值 x **= y x = x ** y
//= 整除赋值 x //= y x = x // y

比较(关系)运算符#

比较运算符,也称关系运算符,用于对变量或表达式的结果大小、真假等进行比较。如果比较结果为真,则返回 True;如果为假,则返回 False。比较运算符通常用在 if 和 while 语句中作为判定语句流流向的依据。

比较运算符
运算符 作用 示例 结果
> 大于 5 > 6 False
< 小于 5 < 6 True
== 等于 'abc' == 'ab' False
!= 不等于 'abc' != 'ab' True
>= 大于等于 5 >= 5 True
<= 小于等于 5 <= 5 True

Python 支持链式比较,相当于拆分多个逻辑表达式,再进行逻辑与操作。如下所示:

print(1 < 2 < 3)  # True
# 相当于
print(1 < 2 and 2 < 3)  # True

x = 8
print(0 < x <= 10)  # True
# 相当于
print(x > 0 and x <= 10)  # True

逻辑运算符#

逻辑运算符是对真或假两种布尔值进行运算,运算的结果仍是一个布尔值。

逻辑运算符
运算符 含义 用法 说明
and 逻辑与 op1 and op2 仅当 op1 和 op2 都为 True 时,
结果才为 True,否则为 False。
or 逻辑或 op1 or op2 仅当 op1 和 op2 都为 False 时,
结果才为 False,否则为 True。
not 逻辑非 not op 当 op 为 True 时,结果为 False;
当 op 为 False 时,结果为 True。

示例:某软件开发公司要招聘一名程序员,其职位要求如下:

  • 具备三年及以上工作经验,或者应届本科毕业,且平均成绩在 75 分及以上;
  • 掌握 Python 语言;
  • 主导开发过任何语言编写的较知名开源项目的,可直接参与面试。

以下代码描述了某个面试者的基本条件,其中各个变量的意义可以从变量名称直接看出,请进一步完成程序设计,判断该面试者是否能获得面试资格。

某面试者的条件:

service_years = 0
is_green_graduate = True
avg_score = 75.7
is_python_programmer = True
is_opensource_owner = False
答案
has_interview_qualification = ((service_years >= 3 
    or (is_green_graduate and avg_score >= 75)) 
    and is_python_programmer) or is_opensource_owner

print(has_interview_qualification)  # True

位运算符#

位运算符是把数字看作二进制数来进行计算的,因此,需要先把要执行运算的数据转换为二进制,然后才能执行运算。

Python 中的位运算符有位与(&)、位或(|)、位异或(^)、取反(~)、左移位(<<)和右移位(>>)。

位与运算#

位与运算的运算符为 &,其运算规则是:两个操作数的二进制表示,只有对应数位都是 1 时,结果数位才是 1,否则为 0。如果两个操作数的精度不同,则结果的精度与精度高的操作数相同。

#   0010_1100
# & 0011_1010
# = 0010_1000

位或运算#

位或运算的运算符为 |,其运算规则是:两个操作数的二进制表示,只有对应数位都是 0 时,结果数位才是 0,否则为 1。如果两个操作数的精度不同,则结果的精度与精度高的操作数相同。

#   0010_1100
# | 0011_1010
# = 0011_1110

位异或运算#

位异或运算的运算符为 ^,其运算规则是:两个操作数的二进制表示相同时(同时为 0 或同时为 1),结果数位才是 0,否则为 1。如果两个操作数的精度不同,则结果的精度与精度高的操作数相同。

#   0010_1100
# ^ 0011_1010
# = 0001_0110

位取反运算也称位非运算,其运算符为 ~,运算规则是:将操作数中对应的二进制数 1 修改为 0,0 修改为 1。

# ~ 00101100
# = 11010011

左移位运算#

左移位运算的运算符为 <<,该运算将一个二进制操作数向左移动指定的位数,左边(高位端)溢出的位被丢弃,右边(低位端)的空位用 0 补充。左移 n 位运算相当于乘以 2 的 n 次幂。

#   0010_1100 << 1
# = 0101_1000
# 
#   0010_1100 << 2
# = 1011_0000     

右移位运算#

右移位运算的运算符为 >>,该运算将一个二进制操作数向右移动指定的位数,右边(低位端)溢出的位被丢弃,而在填空左边(高位端)的空位时,如果最高位是 0(正数),左侧空位填入 0;如果最高位是 1(负数),左侧空位填入 1。右移 n 位运算相当于除以 2 的 n 次幂。

#   0010_1100 >> 1
# = 0001_0110
#
#   0010_1100 >> 2
# = 0000_1011

#   1101_1010 >> 1
# = 1110_1101

运算符的优先级#

请先回答表达式 2 + 2 * 4 的计算结果!

——答案不是 16,而是 10。这是因为数学的四则运算应遵循先乘除,后加减的规则。

在 Python 中,各种运算符也有不同的优先级,其运算规则为:

优先级高的运算先执行,优先级低的运算后执行,同一优先级的操作按照从左到右的顺序进行。也可以像四则运算那样使用小括号,括号内的运算最先执行。

以下两页表按照优先级从高到低的顺序列出了各运算符的优先级,同一行中的运算符具有相同的优先级。

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