if 语句
if 语句是 Python 中最基础的条件控制结构,它让程序能够根据某个条件的真假来决定是否执行一段代码。条件本身是一个表达式,Python 会将其求值为布尔值 True 或 False,只有当条件为真时,if 下方的代码块才会被执行。
基本语法
if 语句以关键字 if 开头,后跟一个条件表达式和冒号,下一行开始缩进的代码块构成该条件的执行体:
x = 42
if x > 0:
print("x 是正数")
这里的 x > 0 是一个关系表达式,返回布尔值。当 x 为 42 时,条件为 True,于是打印出结果。如果 x 改为 -5,条件为 False,print 语句不会执行,程序直接跳过整个代码块继续向下运行。
缩进规则
Python 用缩进来表示代码块的归属,而不是像 C 或 Java 那样使用大括号。这是 Python 语法最显著的特征之一。if 语句的代码块必须比 if 本身缩进一层,通常使用 4 个空格:
score = 85
if score >= 60:
print("成绩合格")
print("可以参加下一阶段学习")
同一代码块内的所有语句必须保持相同的缩进量。如果缩进不一致,解释器会抛出 IndentationError:
# 错误示例
if score >= 60:
print("成绩合格")
print("缩进不一致") # IndentationError
缩进不仅是一种风格,更是语法的一部分。PEP 8 建议使用 4 个空格而非制表符,以避免不同编辑器显示不一致的问题。
条件表达式
if 后面的条件可以是任何表达式,Python 会将其转换为布尔值进行判断。常见的条件形式包括:
关系运算:
age = 20
if age >= 18:
print("已成年")
相等判断:注意使用 == 而非赋值运算符 =:
name = "Python"
if name == "Python":
print("这是 Python")
成员判断:用 in 检查某个值是否存在于序列中:
tags = ["python", "java", "go"]
if "python" in tags:
print("包含 Python 标签")
逻辑组合:用 and、or、not 组合多个条件:
temperature = 25
humidity = 60
if temperature > 20 and humidity < 80:
print("天气舒适")
链式比较
Python 支持链式比较,可以像数学表达式一样连续书写,这比用 and 连接更简洁直观:
score = 85
if 80 <= score < 90:
print("B 等级")
上面的写法等价于 score >= 80 and score < 90,但只计算 score 一次,且可读性更好。链式比较可以任意延长:
x = 5
if 1 < x < 10 < 100:
print("x 在合理范围内")
真值判断
Python 中并非只有 True 和 False 才能作为条件,几乎所有对象都自带"真值"(truthiness)。在 if 语句中,以下值会被视为假(falsy):
NoneFalse- 数值零:
0、0.0、0j - 空序列和空映射:
''、[]、()、{}、set()、range(0)
其余对象在布尔上下文中均被视为真(truthy)。利用这一特性,可以写出简洁而地道的条件代码:
name = "航仔"
if name: # 字符串非空,为真
print(f"欢迎 {name}")
items = []
if not items: # 列表为空,not 后为真
print("购物车是空的")
对于可能为 None 的变量,可以直接判断:
result = None
if result:
print("有结果")
else:
print("尚无结果")
如果需要严格区分 None 和空值,应使用 is None:
data = []
if data is None:
print("未初始化")
elif not data:
print("已初始化但为空")
空代码块的处理
如果某个条件下暂时不需要执行任何操作,但又必须保留语法上的语句体,可以使用 pass 语句占位:
x = -1
if x < 0:
pass # 负数情况待处理
pass 不执行任何动作,仅满足"代码块至少包含一条语句"的语法要求。
常见错误
初学者在使用 if 语句时容易犯以下错误:
混淆赋值与比较:
# 错误
if x = 5: # SyntaxError
pass
# 正确
if x == 5:
pass
忘记冒号:
# 错误
if x > 0 # SyntaxError: expected ':'
print("正数")
缩进使用制表符与空格混用:
# 可能引发 TabError
if x > 0:
\tprint("使用制表符")
print("使用空格")
误用括号:Python 的条件不需要括号包裹,虽然加上也不会报错,但不必要:
if (x > 0): # 可以运行,但不推荐
print("正数")
if 语句是所有条件分支的起点,理解它的缩进规则、真值判断和链式比较,是掌握 Python 流程控制的第一步。