目录
1.if判断----最基本的条件执行
2.判断条件----任何表达式均可
哪些值会被当作 False?
3.空值与非空----Pythonic判断
判断用户输入是否有效(去空格后)
4.代码块----缩进决定归属
如何形成代码块?
常见缩进错误
5.空语句pass-----占位符
空代码块怎么办?
6. 条件表达式(三元运算符)
语法
常见用途:函数中的快速返回
7.assert断言----调试利器
语法
断言与 if 的区别
重要:生产环境可以禁用断言
8.短路逻辑在条件中的妙用
取第一个真值(或最后一个假值)
安全的属性访问
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;否则返回 b7.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。
感谢你的观看,期待我们下次再见!