运算符

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

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。比较运算符通常用在 ifwhile 语句中作为判定语句流流向的依据。

比较运算符
运算符 作用 示例 结果
> 大于 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 仅当 op1op2 都为 True 时,
结果才为 True,否则为 False
or 逻辑或 op1 or op2 仅当 op1op2 都为 False 时,
结果才为 False,否则为 True
not 逻辑非 not op opTrue 时,结果为 False
opFalse 时,结果为 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 表达式
:= 赋值表达式
基本数据类型课后作业