目录
[哪些值会被当作 False?](#哪些值会被当作 False?)
[6. 条件表达式(三元运算符)](#6. 条件表达式(三元运算符))
[断言与 if 的区别](#断言与 if 的区别)
1.if判断----最基本的条件执行
if 条件:
条件为真时执行的代码
注意:if 后面要跟一个条件表达式,然后是一个英文冒号 :。下一行开始是缩进的代码块(通常缩进 4 个空格)。这个缩进的代码块只有在条件成立时才会执行。
score = 68
if score >= 60:
print("及格了!")
- 条件为
True则执行,否则跳过。
注:
1.if是 Python 的保留字(关键字),不能用作变量名。2.条件后面一定要有冒号
:,初学者经常忘记,导致语法错误。3.缩进必须一致,推荐使用 4 个空格,不要混用 Tab 和空格,否则会报
TabError。
2.判断条件----任何表达式均可
很多初学者以为 if 后面的条件必须是像 a > b 这样的比较运算,其实不是。Python 非常灵活:任何表达式 都可以放在 if 后面,Python 会自动把它转换成布尔值(True 或 False)。这个自动转换的过程叫做"真值测试"(Truth Value Testing)。
哪些值会被当作 False?
Python 中以下情况会被视为"假":
布尔值
False数字
0、0.0、0j空字符串
""空列表
[]、空元组()、空字典{}、空集合set()
None
其他所有值(包括非零数字、非空字符串、非空容器等)都被视为"真"。
if后的表达式会自动转换为布尔值
age = 18
if age == 18: # 比较运算
print("刚好成年")
if age >= 18: # 大于等于
print("可以投票")
name = "张三" # 定义 name 变量,也可以改成 input("请输入名字:")
if name: # 非空字符串为 True
print(f"你好, {name}")
if 5 > 3 and 2 < 4: #逻辑组合
print("真")
weekday = "Sat" # 定义 weekday,也可以是 "Sun" 或 "Mon"
if weekday in ("Sat", "Sun"): #in运算
print("周末")

3.空值与非空----Pythonic判断
在 Python 社区,判断一个值是否为空(或零、或 None)的标准写法是直接 if x: 或 if not x:。这种写法不仅简洁,而且能正确处理各种类型。
| 写法 | 含义 |
|---|---|
if x: |
非空/非零/非None 时真 |
if not x: |
空/零/None 时真 |
items = []
if items:
print("非空")
else:
print("空列表")
-
在 Python 中,空列表
[]被视为False,而非空列表(如[1,2])被视为True。 -
这里
items是空列表,所以if items:条件为假,执行else分支,输出:空列表。
判断用户输入是否有效(去空格后)
user_input = " "
if user_input.strip():
print("有效输入")
-
input是一个包含两个空格的字符串" "。 -
strip()方法会删除字符串首尾的空白字符(空格、制表符等),返回一个新字符串。这里" ".strip()的结果是空字符串 ""。 -
空字符串在条件判断中相当于
False,因此if input.strip():条件为假,不会执行print。所以没有任何输出。
最佳实践总结:
-
要判断"是否为空/零/None" → 用
if not x: -
要判断"是否非空/非零/非None" → 用
if x: -
要专门 判断
None→ 用if x is None:或if x is not None:
4.代码块----缩进决定归属
Python 用缩进 来划分代码块,而不是像 C/Java 使用花括号 {}。这强制了代码的整洁,也是初学者容易出错的地方。
如何形成代码块?
在 if 语句的冒号后面,换行并缩进(通常 4 个空格),直到缩进回到原来的级别,就表示代码块结束。
score=68
if score >= 60:
print("及格了") # 缩进 4 空格,属于 if 块
print("可以庆祝一下") # 同样缩进,也属于 if 块
print("程序结束") # 没有缩进,与 if 平级,总是执行
常见缩进错误
-
忘记缩进:
if True: print("没有缩进") # IndentationError
-
缩进不一致 (混用空格和 Tab):
编辑器通常会把 Tab 显示为 4 个空格,但实际字符不同。Python 3 不允许混用,会报
TabError。
解决方案:设置编辑器,让 Tab 自动扩展为空格。 -
多缩进或少缩进 :
不会报错,但逻辑会错。比如本应属于
if的代码因为没有缩进而被当成了普通代码,或者不该缩进的代码意外进入if块。
5.空语句pass-----占位符
空代码块怎么办?
有时候你想先写 if 结构,但内部逻辑还没想好。Python 不允许空的代码块,会报语法错误。这时可以用 pass 语句作为"占位符",它什么都不做,只是让语法通过。
condition =7
if condition:
pass # 待实现
6. 条件表达式(三元运算符)
很多时候,你的"判断"只是为了给一个变量赋值:如果条件成立赋值为 A,否则赋值为 B。Python 提供了一种紧凑的写法,称为条件表达式(也叫三元运算符)。
语法
值1 if 条件 else 值2
当条件为真时,整个表达式的值为 值1;否则为 值2。
age = 18
status = "成年" if age >= 18 else "未成年"
print(status) #成年
等价于
if age >= 18:
status = "成年"
else:
status = "未成年"
三元运算符更简短,适合简单的二分赋值。但不适合嵌套使用
虽然能工作,但可读性很差,容易出错。推荐拆分成 if-elif 语句。
常见用途:函数中的快速返回
def my_max(a, b): # 定义一个名为 my_max 的函数,接收两个参数 a 和 b
return a if a > b else b # 如果 a > b 成立,返回 a;否则返回 b
7.assert断言----调试利器
断言是一种特殊的条件判断:它假设某个条件一定为真,如果条件为假,程序会立即崩溃并抛出 AssertionError。断言主要用于开发阶段检测程序中的逻辑错误,或者在单元测试中验证预期结果。
语法
assert 条件, "可选错误信息"
def divide(a, b):
assert b != 0, "除数不能为零"
return a / b
print(divide(10, 2)) # 正常 5.0
print(divide(10, 0)) # 触发 AssertionError: 除数不能为零

断言与 if 的区别
-
if用于正常业务逻辑,即使条件为假程序也能继续(通过else分支处理)。 -
assert用于检测"不该发生"的情况,一旦发生就应该立即停止运行,而不是尝试恢复。
重要:生产环境可以禁用断言
Python 启动时可以使用 -O 优化选项,此时所有 assert 语句都会被忽略,不执行也不检查。因此绝对不要 用 assert 做数据验证(比如检查用户输入是否合法),因为一旦开启优化,验证就会失效。断言只适合检查程序内部的逻辑错误。
8.短路逻辑在条件中的妙用
我们在前面提到 and 和 or 有短路特性:and 左边为假时右边不执行,or 左边为真时右边不执行。利用这个特性,我们可以写出非常简洁的"默认值"或"安全检查"代码。
取第一个真值(或最后一个假值)
name = input("请输入姓名:") or "匿名用户"
如果用户输入了非空字符串,input 返回的字符串为真,or 直接返回该字符串,赋值给 name。如果用户直接回车(空字符串),空字符串为假,or 继续计算右边的值,于是 name 被赋值为 "匿名用户"。这种写法一行就实现了"如果输入为空则用默认值"。
安全的属性访问
假设有一个用户对象 user,它有 name 属性,但 user 本身可能是 None。直接访问 user.name 会报错。
if user and user.name:
print(user.name)
因为 and 短路,如果 user 为 None(假),就不会继续求 user.name,从而避免了 AttributeError。
感谢你的观看,期待我们下次再见!