网站首页 > 技术文章 正文
一、单分支结构 (if 语句):
if 语句的语法格式如下:
if <条件>:
<语句块>
· 语句块: 是当 if 后面的条件满足(结果为 True)时要执行的一个或多个语句。这些语句必须通过缩进(通常是一个 Tab 键或 4 个空格) 来表明它们属于这个 if 语句。
· 执行过程:
1. if 语句会先检查条件的结果是 True 还是 False。
2. 如果结果是 True,就执行缩进的语句块。
3. 如果结果是 False,就跳过这个语句块。
4. 无论条件是否满足,执行完(或跳过)语句块后,程序都会继续执行 if 语句后面、与 if 开头对齐的下一条代码。
· 条件: if 后面的条件可以是任何能得出 True 或 False 结果的表达式或函数。最常用的是比较运算符(比如 ==, >, <, != 等)。
二、二分支结构 (if-else 语句):
if-else 语句用来处理条件的两种可能结果,语法格式如下:
if <条件>:
<语句块1>
else:
<语句块2>
· 执行过程:
1. 先检查 if 后面的条件。
2. 如果条件为 True,执行 语句块1。
3. 如果条件为 False,执行 语句块2。
4. 执行完 语句块1 或 语句块2 后,程序继续执行 else 后面、与 if 开头对齐的下一条代码。
· 简洁表达式 (三元表达式):
对于只需要根据条件返回一个值的简单情况,可以用更简洁的写法:
<表达式1> if <条件> else <表达式2>
o 如果条件为 True,整个表达式的结果就是 <表达式1> 的值。
o 如果条件为 False,整个表达式的结果就是 <表达式2> 的值。
o <表达式1> 和 <表达式2> 通常是简单的值(如数字、字符串)或能计算出值的表达式。
三、多分支结构:
1. if-elif-else 语句:
这是二分支的扩展,用于处理多种可能的情况。语法格式如下:
if <条件1>:
<语句块1>
elif <条件2>:
<语句块2>
... # 可以有多个 elif
else: # 可选的
<语句块N>
o 执行过程:
1. 按顺序(从上到下)检查每个条件(if, elif)。
2. 找到第一个结果为 True 的条件,就执行它对应的语句块。
3. 执行完该语句块后,跳过后面所有的 elif 和 else,直接执行整个结构后面的代码。
4. 如果所有 if 和 elif 的条件都是 False,那么就会执行 else 下面的 <语句块N>(如果有的话)。
o 注意: else 部分不是必须写的,它是所有条件都不满足时的“兜底”选项。
2. match-case 语句 (Python 3.10+ 引入):
Python 3.10 引入了 结构化模式匹配 (match-case),它功能更强大,特别适合根据一个值(subject) 的结构或内容来匹配不同的情况。基础语法:
match <要匹配的值>:
case <模式1>:
# 处理模式1匹配的情况
case <模式2> if <守卫条件>: # 可以加额外的判断条件(守卫)
# 处理模式2匹配且守卫条件也满足的情况
case _: # 通配符,匹配任何情况(类似 switch 里的 default)
# 默认处理(前面都没匹配上时执行)
o 匹配常量(数值、字符串等):
def http_status(code):
match code:
case 200:
return "OK"
case 404:
return "Not Found"
case 500 | 501: # 用 | 匹配多个值
return "Server Error"
case _: # 匹配所有其他情况
return "Unknown Status"
o 使用守卫条件 (if): 在匹配到模式后,可以再用 if 进行更精细的判断:
match point: # 假设 point 是一个 (x, y) 坐标
case (x, y) if x > y: # 匹配坐标,并且要求 x > y
print("X is greater")
case (x, y) if x < y:
print("Y is greater")
case (x, y): # 匹配坐标,但 x 等于 y 的情况
print("X equals Y")
o 重要特点:
§ 顺序敏感: case 是按代码顺序检查的,第一个匹配成功的 case 会被执行,后面的 case 不再检查。
§ 不一定强制穷举: Python 不要求你匹配所有可能情况。但为了避免遗漏,强烈建议使用 case _: 作为最后的兜底选项。
§ 变量作用域: 在 case 模式中用来“捕获”值的变量名(如上面 x, y),只在这个 case 块内部有效。如果外部有同名变量,在这个 case 块里会被覆盖(仅限块内)。
§ 不能直接写运算符: 不能在 case 后面直接写 is, ==, in 等运算符进行比较。需要用守卫条件 (if) 或者在模式中匹配具体值来实现。
o 对于复杂多分支逻辑,优先考虑 match-case(尤其是在 Python 3.10 及以上版本),因为它通常比一长串 if-elif-elif 更清晰、更强大。
猜你喜欢
- 2025-07-27 Python 3.14 新特性盘点,更新了些什么?
- 2025-07-27 Python单元测试(pycharm单元测试教程)
- 2025-07-27 Python学不会来打我(8)字符串string类型深度解析
- 2025-07-27 Python 中 字符串处理的高效方法,不允许你还不知道
- 2025-07-27 Python-分支结构(python分支结构教学设计)
- 2025-07-27 python学习教程-第六节内容(python基础教学视频)
- 2025-05-05 python unittest 基本用法(python3 unittest)
- 2025-05-05 使用pytest进行单元测试(pytest详解)
- 2025-05-05 用扣子开发一个图灵测试游戏(用扣子开发一个图灵测试游戏的软件)
- 2025-05-05 Python进阶-day19: 测试与调试(python测验)
- 1518℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 599℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 521℃MySQL service启动脚本浅析(r12笔记第59天)
- 489℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 489℃启用MySQL查询缓存(mysql8.0查询缓存)
- 477℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 456℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 454℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)