运算符和表达式

学习Python中的各种运算符和如何构建表达式来执行计算和操作数据

运算符概述

在Python中,运算符是用于执行各种操作的符号。它们可以用于数学计算、比较值、逻辑操作等。 表达式是由运算符和操作数组成的组合,用于计算值。

运算符分类

  • 算术运算符:用于执行基本的数学运算
  • 比较运算符:用于比较两个值
  • 逻辑运算符:用于组合条件语句
  • 赋值运算符:用于给变量赋值
  • 位运算符:用于操作二进制位
  • 成员运算符:用于测试序列中是否存在特定元素
  • 身份运算符:用于比较对象是否相同

表达式

表达式是由运算符和操作数组成的代码片段,用于计算值。例如:

5 + 3 # 算术表达式,结果为8
10 > 5 # 比较表达式,结果为True
True and False # 逻辑表达式,结果为False
"Hello" + " " + "World" # 字符串连接表达式,结果为"Hello World"

算术运算符

算术运算符用于执行基本的数学运算,如加法、减法、乘法等。

算术运算符列表

运算符 描述 示例
+ 加法 - 两个数相加 5 + 3 = 8
- 减法 - 从左边减去右边 5 - 3 = 2
* 乘法 - 两个数相乘 5 * 3 = 15
/ 除法 - 左边除以右边 5 / 3 = 1.6666666666666667
// 取整除 - 商的整数部分 5 // 3 = 1
% 取模 - 除法的余数 5 % 3 = 2
** 幂 - 左边的右边次幂 5 ** 3 = 125

算术运算符示例

# 定义变量
a = 10
b = 3
# 加法
print(a + b) # 输出: 13
# 减法
print(a - b) # 输出: 7
# 乘法
print(a * b) # 输出: 30
# 除法
print(a / b) # 输出: 3.3333333333333335
# 取整除
print(a // b) # 输出: 3
# 取模
print(a % b) # 输出: 1
# 幂
print(a ** b) # 输出: 1000

比较运算符

比较运算符用于比较两个值,并返回一个布尔值(True或False)。

比较运算符列表

运算符 描述 示例
== 等于 - 检查两个值是否相等 5 == 3 → False
!= 不等于 - 检查两个值是否不相等 5 != 3 → True
> 大于 - 检查左边是否大于右边 5 > 3 → True
< 小于 - 检查左边是否小于右边 5 < 3 → False
>= 大于等于 - 检查左边是否大于或等于右边 5 >= 3 → True
<= 小于等于 - 检查左边是否小于或等于右边 5 <= 3 → False

比较运算符示例

# 定义变量
a = 10
b = 3
# 等于
print(a == b) # 输出: False
# 不等于
print(a != b) # 输出: True
# 大于
print(a > b) # 输出: True
# 小于
print(a < b) # 输出: False
# 大于等于
print(a >= b) # 输出: True
# 小于等于
print(a <= b) # 输出: False

逻辑运算符

逻辑运算符用于组合条件语句,并返回一个布尔值(True或False)。

逻辑运算符列表

运算符 描述 示例
and 逻辑与 - 如果两个条件都为True,则返回True 5 > 3 and 10 > 5 → True
or 逻辑或 - 如果任何一个条件为True,则返回True 5 > 3 or 10 < 5 → True
not 逻辑非 - 反转条件的结果 not(5 > 3) → False

逻辑运算符示例

# 定义变量
a = 10
b = 3
c = 5
# 逻辑与
print(a > b and c < b) # 输出: False (True and False)
# 逻辑或
print(a > b or c < b) # 输出: True (True or False)
# 逻辑非
print(not(a > b)) # 输出: False (not True)
print(not(c < b)) # 输出: True (not False)

逻辑运算符的短路特性

Python中的逻辑运算符具有短路特性:

  • 对于and运算符,如果第一个条件为False,则不会计算第二个条件
  • 对于or运算符,如果第一个条件为True,则不会计算第二个条件
# and的短路特性
print(False and 1/0) # 不会抛出ZeroDivisionError,因为第一个条件为False
# or的短路特性
print(True or 1/0) # 不会抛出ZeroDivisionError,因为第一个条件为True

赋值运算符

赋值运算符用于给变量赋值,并且可以结合其他运算同时进行赋值。

基本赋值运算符

最基本的赋值运算符是等号(=),用于将右侧的值赋给左侧的变量。

x = 5 # 简单赋值
name = "Alice" # 字符串赋值
is_valid = True # 布尔值赋值

复合赋值运算符

复合赋值运算符是将算术或位运算与赋值操作结合的简写形式。

运算符 描述 示例
+= 加法赋值 - 将右侧值加到变量上 x += 5 等价于 x = x + 5
-= 减法赋值 - 从变量中减去右侧值 x -= 5 等价于 x = x - 5
*= 乘法赋值 - 将变量乘以右侧值 x *= 5 等价于 x = x * 5
/= 除法赋值 - 将变量除以右侧值 x /= 5 等价于 x = x / 5
//= 取整除赋值 - 将变量整除右侧值 x //= 5 等价于 x = x // 5
%= 取模赋值 - 将变量对右侧值取模 x %= 5 等价于 x = x % 5
**= 幂赋值 - 将变量的右侧次幂赋值给变量 x **= 5 等价于 x = x ** 5

赋值运算符示例

# 定义变量
x = 10
# 加法赋值
x += 5 # x现在等于15
# 减法赋值
x -= 3 # x现在等于12
# 乘法赋值
x *= 2 # x现在等于24
# 除法赋值
x /= 4 # x现在等于6.0(浮点数)
# 取整除赋值
x //= 2 # x现在等于3.0
# 取模赋值
x %= 2 # x现在等于1.0
# 幂赋值
x **= 3 # x现在等于1.0

位运算符

位运算符用于操作二进制位。它们将数字转换为二进制形式,然后对每一位进行操作,最后返回十进制结果。

位运算符列表

运算符 描述 示例
& 按位与 - 对应位都为1时结果为1 5 & 3 → 1
| 按位或 - 对应位有一个为1时结果为1 5 | 3 → 7
^ 按位异或 - 对应位不同时结果为1 5 ^ 3 → 6
~ 按位取反 - 每一位取反(0变1,1变0) ~5 → -6
<< 左移 - 所有位向左移动指定位数,右边补0 5 << 2 → 20
>> 右移 - 所有位向右移动指定位数,左边补符号位 5 >> 1 → 2

位运算符示例

# 定义变量
a = 5 # 二进制: 0101
b = 3 # 二进制: 0011
# 按位与
print(a & b) # 二进制: 0001 → 十进制: 1
# 按位或
print(a | b) # 二进制: 0111 → 十进制: 7
# 按位异或
print(a ^ b) # 二进制: 0110 → 十进制: 6
# 按位取反
print(~a) # 二进制: 1010 → 十进制: -6(补码表示)
# 左移
print(a << 2) # 二进制: 010100 → 十进制: 20
# 右移
print(a >> 1) # 二进制: 0010 → 十进制: 2

成员运算符

成员运算符用于测试序列(如字符串、列表、元组)、集合或字典中是否存在特定元素。

成员运算符列表

运算符 描述 示例
in 如果序列中包含指定元素,则返回True 'a' in 'apple' → True
not in 如果序列中不包含指定元素,则返回True 'x' not in 'apple' → True

成员运算符示例

# 字符串示例
text = "Hello, World!"
print('o' in text) # 输出: True
print('z' not in text) # 输出: True
# 列表示例
numbers = [1, 2, 3, 4, 5]
print(3 in numbers) # 输出: True
print(6 not in numbers) # 输出: True
# 字典示例(检查键)
person = {'name': 'Alice', 'age': 25}
print('name' in person) # 输出: True
print('city' not in person) # 输出: True
print(25 in person) # 输出: False(只检查键,不检查值)

身份运算符

身份运算符用于比较两个对象是否是同一个对象,即它们是否在内存中引用同一个位置。

身份运算符列表

运算符 描述 示例
is 如果两个对象是同一个对象,则返回True x is y
is not 如果两个对象不是同一个对象,则返回True x is not y

身份运算符示例

# 创建对象
a = [1, 2, 3]
b = a # b引用同一个列表
c = [1, 2, 3] # c是一个新的、值相同的列表
# 身份比较
print(a is b) # 输出: True(同一对象)
print(a is c) # 输出: False(不同对象,即使值相同)
print(a == c) # 输出: True(值相等)
# 数字示例(小整数有特殊处理)
x = 10
y = 10
print(x is y) # 输出: True(小整数在Python中被缓存)
# 大数字示例
x = 1000
y = 1000
print(x is y) # 输出: False(大数字通常不是同一个对象)

== 和 is 的区别

  • == 比较两个对象的值是否相等
  • is 比较两个对象是否是同一个对象(内存地址相同)
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # 输出: True(值相等)
print(a is b) # 输出: False(不同对象)

运算符优先级

运算符优先级决定了表达式中运算符的计算顺序。当表达式中有多个运算符时,优先级高的运算符先计算。

运算符优先级列表

以下是Python中运算符的优先级从高到低的顺序(优先级高的先计算):

优先级 运算符 描述
1 ** 幂运算
2 ~ + - 按位取反, 正号, 负号
3 * / % // 乘, 除, 取模, 取整除
4 + - 加, 减
5 << >> 左移, 右移
6 & 按位与
7 ^ | 按位异或, 按位或
8 < <= > >= 比较运算符
9 == != 等于, 不等于
10 is is not 身份运算符
11 in not in 成员运算符
12 not 逻辑非
13 and 逻辑与
14 or 逻辑或

运算符优先级示例

以下示例展示了运算符优先级如何影响表达式的计算顺序:

# 示例1: 优先级决定计算顺序
print(2 + 3 * 4) # 先乘后加,输出: 14
print((2 + 3) * 4) # 括号优先,输出: 20
# 示例2: 幂运算优先级最高
print(2 ** 3 * 4) # 先计算2**3,再乘4,输出: 32
# 示例3: 逻辑运算符优先级
print(False or True and False) # and优先级高于or,输出: False
print((False or True) and False) # 括号改变顺序,输出: False

互动练习

练习1: 算术运算

计算表达式:10 + 5 * 3 - 20 / 4

练习2: 比较运算

比较结果:10 > 5 and 15 < 20 or not(3 == 4)

练习3: 位运算

计算位运算:5 & 3 | 2

练习4: 身份运算

判断结果:x = [1, 2]; y = [1, 2]; x is y

章节总结

在本章中,我们学习了Python中各种类型的运算符和表达式:

  • 算术运算符用于执行基本的数学运算
  • 比较运算符用于比较两个值并返回布尔值
  • 逻辑运算符用于组合条件语句
  • 赋值运算符用于给变量赋值
  • 位运算符用于操作二进制位
  • 成员运算符用于测试序列中是否存在特定元素
  • 身份运算符用于比较对象是否相同
  • 运算符优先级决定了表达式中运算符的计算顺序

理解运算符和表达式是编写Python程序的基础,它们可以帮助你构建复杂的计算和逻辑判断。

下一章:条件语句

学习如何使用条件语句(if-else)让程序根据条件执行不同的代码块。