Python 零基础教程

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:

  1. Parentheses:括号 () 最高优先级
  2. Exponents:指数 **
  3. Multiplication / Division:乘 *、除 /、整除 //、取模 %(从左到右)
  4. 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)  # 输出: True

2.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()