运算符和表达式#
运算符用于对值进行各种操作。Python 提供了丰富的运算符,包括算术、比较、逻辑、赋值等。
算术运算符#
算术运算符用于执行基本的数学运算。
# 加法
result = 10 + 5 # 15
# 减法
result = 10 - 5 # 5
# 乘法
result = 10 * 5 # 50
# 除法(返回浮点数)
result = 10 / 3 # 3.3333333333333335
# 整数除法(向下取整)
result = 10 // 3 # 3
# 取余(模运算)
result = 10 % 3 # 1
# 幂运算
result = 2 ** 3 # 8(2的3次方)
result = 2 ** 0.5 # 1.4142135623730951(平方根)
# 字符串和列表的运算
"Hello" + " " + "World" # 'Hello World'
[1, 2] + [3, 4] # [1, 2, 3, 4]
"Hi" * 3 # 'HiHiHi'
[1, 2] * 3 # [1, 2, 1, 2, 1, 2]比较运算符#
比较运算符用于比较两个值,返回布尔值(True 或 False)。
# 等于
5 == 5 # True
5 == 3 # False
# 不等于
5 != 3 # True
5 != 5 # False
# 大于
5 > 3 # True
5 > 7 # False
# 小于
3 < 5 # True
7 < 5 # False
# 大于等于
5 >= 5 # True
5 >= 7 # False
# 小于等于
5 <= 5 # True
7 <= 5 # False
# 字符串比较(按字典序)
"apple" < "banana" # True
"cat" > "dog" # False
# 链式比较
x = 5
1 < x < 10 # True(等价于 1 < x and x < 10)逻辑运算符#
逻辑运算符用于组合条件表达式。
# and - 逻辑与(两个条件都为True时返回True)
True and True # True
True and False # False
False and False # False
# or - 逻辑或(至少一个条件为True时返回True)
True or False # True
False or False # False
True or True # True
# not - 逻辑非(取反)
not True # False
not False # True
# 实际应用
age = 20
has_license = True
can_drive = age >= 18 and has_license # True
# 短路求值
# and: 如果第一个为False,不计算第二个
# or: 如果第一个为True,不计算第二个
False and print("不会执行")
True or print("不会执行")赋值运算符#
赋值运算符用于给变量赋值。
# 基本赋值
x = 10
# 加法赋值
x += 5 # 等价于 x = x + 5,结果是 15
# 减法赋值
x -= 3 # 等价于 x = x - 3,结果是 12
# 乘法赋值
x *= 2 # 等价于 x = x * 2,结果是 24
# 除法赋值
x /= 4 # 等价于 x = x / 4,结果是 6.0
# 整数除法赋值
x //= 2 # 等价于 x = x // 2,结果是 3.0
# 取余赋值
x %= 2 # 等价于 x = x % 2,结果是 1.0
# 幂赋值
x **= 3 # 等价于 x = x ** 3,结果是 1.0
# 多重赋值
a, b = 1, 2 # a = 1, b = 2
a, b = b, a # 交换变量值
# 链式赋值
x = y = z = 0 # x, y, z 都等于 0身份运算符#
身份运算符用于比较两个对象的内存地址(是否是同一个对象)。
# is - 检查两个变量是否引用同一个对象
a = [1, 2, 3]
b = a
c = [1, 2, 3]
a is b # True(a和b引用同一个对象)
a is c # False(a和c是不同的对象)
a == c # True(但值相同)
# is not - 检查两个变量是否不是同一个对象
a is not c # True
# 注意:小整数和字符串可能被Python缓存
x = 256
y = 256
x is y # True(小整数被缓存)
x = 257
y = 257
x is y # False(大整数可能不被缓存,取决于实现)
# None 的比较应该使用 is
x = None
x is None # True(推荐)
x == None # True(不推荐,但也能工作)成员运算符#
成员运算符用于检查值是否在序列中。
# in - 检查值是否在序列中
"a" in "abc" # True
3 in [1, 2, 3] # True
"name" in {"name": "Python"} # True(检查键)
# not in - 检查值是否不在序列中
"d" not in "abc" # True
4 not in [1, 2, 3] # True
# 实际应用
fruits = ["apple", "banana", "orange"]
if "apple" in fruits:
print("找到了苹果")
# 检查字典的键
user = {"name": "Alice", "age": 30}
if "name" in user:
print(user["name"])位运算符#
位运算符用于对整数进行二进制位操作。
# & - 按位与
5 & 3 # 1(二进制:101 & 011 = 001)
# | - 按位或
5 | 3 # 7(二进制:101 | 011 = 111)
# ^ - 按位异或
5 ^ 3 # 6(二进制:101 ^ 011 = 110)
# ~ - 按位取反
~5 # -6(二进制:~101 = ...11111010)
# << - 左移
5 << 1 # 10(二进制:101 << 1 = 1010,相当于乘以2)
# >> - 右移
5 >> 1 # 2(二进制:101 >> 1 = 10,相当于除以2)
# 实际应用:检查奇偶性
x = 5
if x & 1: # 如果最后一位是1,则为奇数
print("奇数")运算符优先级#
当表达式中有多个运算符时,Python 按照优先级顺序计算。优先级从高到低:
- 括号
()- 最高优先级 - 幂运算
** - 一元运算符
+x,-x,~x - 乘除模
*,/,//,% - 加减
+,- - 位移
<<,>> - 按位与
& - 按位异或
^ - 按位或
| - 比较运算符
==,!=,<,>,<=,>=,is,is not,in,not in - 逻辑非
not - 逻辑与
and - 逻辑或
or - 赋值运算符
=,+=,-=等 - 最低优先级
# 优先级示例
result = 2 + 3 * 4 # 14(先算乘法)
result = (2 + 3) * 4 # 20(括号优先)
result = 2 ** 3 * 4 # 32(先算幂运算)
result = 2 ** (3 * 4) # 4096
result = not True and False # False(not优先级高于and)
result = not (True and False) # True
# 使用括号明确优先级(推荐)
result = (a + b) * (c - d) # 清晰明了表达式求值顺序#
Python 从左到右求值表达式,但遵循运算符优先级。
# 从左到右求值
result = 1 + 2 + 3 # 6(先算1+2,再+3)
# 但优先级会影响顺序
result = 1 + 2 * 3 # 7(先算2*3,再+1)
# 赋值运算符从右到左
a = b = c = 10 # 先给c赋值,再给b,最后给a条件表达式(三元运算符)#
Python 支持三元运算符,用于简洁的条件赋值。
# 语法:值1 if 条件 else 值2
x = 10
result = "正数" if x > 0 else "非正数" # "正数"
# 等价于
if x > 0:
result = "正数"
else:
result = "非正数"
# 嵌套使用
x = 0
result = "正数" if x > 0 else ("零" if x == 0 else "负数") # "零"运算符重载#
Python 允许类重载运算符,通过定义特殊方法实现。
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Point(self.x + other.x, self.y + other.y)
def __str__(self):
return f"Point({self.x}, {self.y})"
p1 = Point(1, 2)
p2 = Point(3, 4)
p3 = p1 + p2 # 使用 + 运算符
print(p3) # Point(4, 6)常用表达式模式#
# 检查变量是否存在且非空
value = None
if value: # 如果value是None、0、空字符串、空列表等,则为False
print("有值")
# 安全的字典访问
user = {"name": "Alice"}
age = user.get("age", 0) # 如果age不存在,返回0
# 列表非空检查
items = []
if items: # 空列表为False
print("列表不为空")
# 多重条件检查
age = 25
if 18 <= age <= 65:
print("可以工作")下一步#
掌握了运算符后,可以学习: