Python 运算符
运算符是任何编程语言的骨架,它们允许我们执行计算、比较数据,并控制程序的运行流程。
在 Python 中,运算符 (Operators) 是特殊的符号,用于执行算术、比较或逻辑运算。理解如何高效地使用这些运算符,是编写健壮且高效代码的关键。
本章将为你全面概述 Python 中的算术、比较和逻辑运算符,为你赋予在程序中操作数据和做决策的能力。
1. 算术运算符 (Arithmetic Operators)
算术运算符用于执行数学计算。Python 支持多种算术运算符,每种都有其特定的功能。
1.1 基础算术运算符
- 加法 (
+):将两个操作数相加。
x = 5
y = 3
sum_result = x + y # 结果为 8
print(sum_result)- 减法 (
-):从第一个操作数中减去第二个。
x = 5
y = 3
difference_result = x - y # 结果为 2
print(difference_result)- 乘法 (
*):将两个操作数相乘。
x = 5
y = 3
product_result = x * y # 结果为 15
print(product_result)- 除法 (
/):用第一个操作数除以第二个。注意:这始终会产生一个浮点数结果,即使两个操作数都是整数。
x = 5
y = 3
division_result = x / y # 结果约为 1.6666666666666667
print(division_result)1.2 进阶算术运算符
- 整除、向下取整 (
//):执行除法,但只返回向下取整后的整数部分(即小于或等于结果的最大整数)。
x = 5
y = 3
print(x // y) # 输出: 1
# 注意负数向下取整的情况:-1.66 向下取整是 -2
x = -5
print(x // y) # 输出: -2- 取模、求余数 (
%):返回除法运算后的余数。
x = 5
y = 3
modulus_result = x % y # 5 除以 3 商 1 余 2,结果为 2
print(modulus_result)真实场景示例:判断一个数字是奇数还是偶数。如果 number % 2 等于 0,则是偶数;否则是奇数。
- 幂运算、指数 (
**):计算第一个操作数的第二个操作数次方。
x = 5
y = 3
exponentiation_result = x ** y # 5 的 3 次方 (5 * 5 * 5),结果为 125
print(exponentiation_result)1.3 运算符优先级 (PEMDAS)
当一个表达式包含多个运算符时,Python 会遵循特定的运算顺序,这与数学中的规则一致,通常可以简记为 PEMDAS:
- Parentheses:括号
()最高优先级 - Exponents:指数
** - Multiplication / Division:乘
*、除/、整除//、取模%(从左到右) - Addition / Subtraction:加
+、减-(从左到右)
最佳实践:即使不严格需要,也强烈建议使用括号来显式定义运算顺序。这能极大地提高代码的可读性,避免逻辑错误。
result = 5 + 3 * 2 # 乘法先于加法执行,结果是 11
print(result)
result = (5 + 3) * 2 # 括号强制加法先执行,结果是 16
print(result)2. 比较运算符 (Comparison Operators)
比较运算符用于对比两个值,并根据它们之间的关系返回一个布尔值(True 真 或 False 假)。
2.1 比较运算符类型
- 等于 (
==):如果两边的值相等,返回True。(注意不要与赋值符=混淆)
x = 5
y = 5
print(x == y) # 输出: True- 不等于 (
!=):如果两边的值不相等,返回True。
x = 5
y = 10
print(x != y) # 输出: True- 大于 (
>) 和 小于 (<):判断左侧是否严格大于或小于右侧。
x = 5
y = 3
print(x > y) # 输出: True
print(x < y) # 输出: False- 大于等于 (
>=) 和 小于等于 (<=):包含等于的情况。
x = 5
y = 5
print(x >= y) # 输出: True
print(x <= y) # 输出: True2.2 跨数据类型的比较注意事项
虽然比较运算符可以用于不同的数据类型,但必须了解 Python 的处理机制:
- 数字:基于其数值大小进行比较(整数和浮点数可以混合比较)。
- 字符串:按字典序(基于字符的 Unicode 值)逐字比较。
print("apple" < "banana") # 输出: True,因为字母 'a' 在 'b' 前面- 混合类型:比较不同的数据类型(如比较字符串和整数
"5" > 3)在 Python 3 中通常会直接抛出TypeError报错。请确保比较的值属于同一类型。
3. 逻辑运算符 (Logical Operators)
逻辑运算符用于组合或修改布尔表达式。它们是你在代码中构建复杂判断条件的基石。
3.1 逻辑运算符类型
and(与):只有当两边的条件都为True时,结果才为True。
x = 5
y = 3
# 两个条件都成立,返回 True
print(x > 0 and y < 10) # 输出: True
# 有一个条件不成立,返回 False
print(x > 0 and y > 10) # 输出: False- 真实场景示例:在允许用户访问特定功能之前,检查用户是否“已登录” 并且 (and) “具有管理员权限”。
or(或):只要两边至少有一个条件为True,结果就为True。
x = 5
y = 3
# 只要 y < 10 成立,整个表达式就为 True
print(x < 0 or y < 10) # 输出: True
# 两个条件都不成立,返回 False
print(x < 0 or y > 10) # 输出: False- 真实场景示例:如果用户的“邮箱未验证” 或者 (
or) “手机号未验证”,就向他们发送提醒通知。 not(非):反转操作数的布尔值。真变假,假变真。
condition = True
print(not condition) # 输出: False- 真实场景示例:检查用户是否 不是 (not) 管理员,如果是,则将其重定向到普通用户界面。
3.2 组合逻辑运算符与“短路求值”
你可以将逻辑运算符组合起来创建极其复杂的条件,使用括号可以控制计算顺序。
x = 5
y = 3
z = 10
# (True and True) or True -> True or True -> True
result = (x > 0 and y < 5) or z == 10
print(result) # 输出: True核心机制:短路求值 (Short-Circuit Evaluation)
Python 在处理逻辑运算符时非常聪明,它采用“短路”机制以提升性能并防止报错:
- 对于
and:如果第一个条件是False,Python 就不会再去看第二个条件,因为它已经断定整个结果必然是False。 - 对于
or:如果第一个条件是True,Python 就不会再去看第二个条件,因为整个结果必然已经是True了。
def some_function():
print("这个函数被调用了!")
return True
x = 5
# 由于 x < 0 为 False,在 'and' 运算中结果注定为 False。
# 因此 some_function() 根本不会被执行。
result = x < 0 and some_function()
# 由于 x > 0 为 True,在 'or' 运算中结果注定为 True。
# 因此 some_function() 依然不会被执行。
result = x > 0 or some_function()