python入门系列五(流程控制)

1.引言

在日常生活中,我们会去做一些假设性的事情,或者重复性的行为,这些都属于人类的基本认知能力。那么编程语言同理,会需要做一些假设以及重复性,这即是流程控制要解决的问题域。

在python中,流程控制语句用于控制代码的执行顺序,主要涉及内容:条件判断,模式匹配,循环结构,流程控制关键字

下面来详细看。

2.流程控制

2.1.条件判断语句(if)

if语句用于根据条件决定执行代码块:

  • if:当条件为True时,执行
  • elif(可选):当上一个条件不满足时,匹配检查新条件
  • else(可选):当所有条件都不满足时,执行

代码示例:

python 复制代码
#最基础的if
if True:
    print("我喜欢真理!")

# 带elif的if
if False:
    print("我不喜欢歪理!")
elif True:
    print("所以,最终我还是喜欢真理!")

# 带else的if
if False:
    print("我不喜欢歪理!")
else:
	print("跟上面一样,我依然喜欢真理!")

以上示例代码直接使用True和False布尔值,简化了条件判断逻辑。在实际项目中,条件判定部分,通常会结合:比较运算符,逻辑运算符,成员运算符一起使用。

比较运算符:

逻辑运算符:

成员运算符:

2.2.模式匹配语句(match)

python中模式匹配match语句,类似于其它编程语言中的switch语句,如果你熟悉scala编程语言(著名kafka消息系统实现语言),它们俩有异曲同工之妙。几个关注点如下:

  • 一方面你看其它编程语言中的switch叫做分支判断,而python中的match叫做模式匹配,能力更强大,适应于更多场景
  • python中的match语句,在3.10发布版本中才提供的一个新特性,要求你的python解释环境要大于等于3.10版本
  • 以下案例为了让match语句更全面性,提前预告了一些超纲知识点,不过没有关系,你先了解一下可以这么用,到相应知识点的时候都会详细讲解

2.2.1.基础匹配,值匹配

python 复制代码
# 基础匹配,匹配不同内置数据类型值
def match_inner_type(value):
    match value:
        case 1:
            print("匹配到整数 1")
        case "hello":
            print("匹配到字符串 'hello'")
        case [x, y, z]:
            print(f"匹配到包含三个元素的列表,元素为: {x}, {y}, {z}")
        case _:
            print("未匹配到已知模式")

# 输出: 匹配到整数 1
match_inner_type(1)
# 输出: 匹配到字符串 'hello'
match_inner_type("hello")
# 输出: 匹配到包含三个元素的列表,元素为: 4, 5, 6
match_inner_type([4, 5, 6])
# 输出: 未匹配到已知模式
match_inner_type(3.14)

2.2.2.类型匹配

python 复制代码
# 类型匹配,匹配内置类型
def match_type(data):
    match data:
        case int():
            print("匹配到整数")
        case str() as s if len(s) > 5:  # 结合守卫条件 (guard clause)
            print(f"匹配到长度超过 5 的字符串: {s}")
        case list() | tuple():          # 匹配列表或元组
            print("匹配到序列类型")
        case _:
            print("未知类型")

# 输出: 匹配到整数
match_type(42)
# 输出: 匹配到长度超过 5 的字符串: Python
match_type("Python")
# 输出: 匹配到序列类型
match_type((1, 2))
# 输出: 未知类型
match_type({"key": "value"})

2.2.3.解包嵌套结构

python 复制代码
# 解包嵌套结构
def process_nested(data):
    match data:
        case {"user": name, "scores": [math, physics]}:
            print(f"用户 {name} 的数学成绩: {math}, 物理成绩: {physics}")
        case {"error": code, "message": msg}:
            print(f"错误 {code}: {msg}")
        case _:
            print("无效数据")

# 测试数据
data1 = {"user": "Alice", "scores": [90, 85]}
data2 = {"error": 404, "message": "Not Found"}

# 输出: 用户 Alice 的数学成绩: 90, 物理成绩: 85
process_nested(data1)
# 输出: 错误 404: Not Found
process_nested(data2)

实现数据解包匹配,这个能力可以点个赞!

2.2.4.匹配类实例

python 复制代码
# 匹配类实例
#定义类,超纲知识点了
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

# 定义匹配函数
def describe_point(point):
    match point:
        case Point(x=0, y=0):
            print("原点")
        case Point(x=0) if point.y > 0:  # 匹配 x=0 且 y 为正数的点
            print("Y 轴正方向上的点")

# 创建实例
p1 = Point(0, 0)
p2 = Point(0, 5)

# 输出: 原点
describe_point(p1)
# 输出: Y 轴正方向上的点
describe_point(p2)

2.2.5.通配符匹配

python 复制代码
# 结合通配符
def handle_command(command):
    match command.split():
        case ["exit"]:
            print("退出程序")
        case ["load", filename]:
            print(f"加载文件: {filename}")
        case ["save", *files]:  # 匹配任意数量的参数
            print(f"保存文件列表: {files}")
        case _:
            print("未知命令")

 # 输出: 退出程序
handle_command("exit")
# 输出: 加载文件: data.txt
handle_command("load data.txt")
# 输出: 保存文件列表: ['a.txt', 'b.txt']
handle_command("save a.txt b.txt")

2.3.循环语句(while)

while循环语句,用于在条件满足时重复执行一段代码块,直到条件变为False。基本语法结构:

python 复制代码
while 条件表达式:
	循环体代码

执行流程:

  • 检查条件表达式是否为True
  • 如果为True,执行循环体代码
  • 重复上述两个步骤,直到条件变为False

示例:

python 复制代码
count = 1
while count <= 5:
    print(count)  # 输出 1 到 5
    count += 1    # 更新条件变量

2.4.循环语句(for)

for循环语句,用于遍历可迭代对象:列表,字符串,字典,集合,生成器。按顺序处理元素。语法结构:

python 复制代码
for 变量 in 可迭代对象:
    循环体代码

执行流程:

  • 依次从可迭代对象中取出元素
  • 将元素赋值给变量
  • 执行循环体代码
  • 重复直到所有元素被遍历

示例:

python 复制代码
# 遍历列表
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)
    
# 遍历字符串
text = "Hello"
for char in text:
    print(char)

# 集合range函数
# 遍历 0~4
for i in range(5):
    print(i)  # 输出: 0 1 2 3 4

# 遍历 2~5(不包含5)
for i in range(2, 5):
    print(i)  # 输出: 2 3 4

# 步长为2
for i in range(0, 10, 2):
    print(i)  # 输出: 0 2 4 6 8
    
# 遍历字典
person = {"name": "小明", "age": 25, "city": "广州"}

# 遍历键
for key in person:
    print(key)  # 输出: name → age → city

# 遍历键值对
for key, value in person.items():
    print(f"{key}: {value}")

2.5.循环while VS 循环for

既生瑜何生亮!既然有了while循环语句,怎么还要有for循环语句呢?我们说存在即合理,虽然都是循环语句,但各自有各自的特点和适用场景。

2.6.流程控制关键字(continue,break,pass)

流程控制语句中,有时候我们需要打破常规执行流程,这个时候可以配套流程控制关键字一起实现。

  • continue:跳过当前迭代的剩余代码,直接进入下一次循环
python 复制代码
num = 0
while num < 5:
    num += 1
    if num % 2 == 0:
        continue  # 跳过偶数
    print(num)    # 输出 1, 3, 5
  • break: 立即终止整个循环,跳出循环体
python 复制代码
while True:
    user_input = input("输入 'exit' 退出:")
    if user_input == "exit":
        break  # 退出循环
    print("你输入了:", user_input)
  • pass:什么也不做,预留位置
python 复制代码
# 占位未实现函数
def future_feature():
    pass  # 待后续补充代码

# 定义空异常处理块
try:
    x = 1 / 0
except ZeroDivisionError:
    pass  # 忽略错误(实际开发中谨慎使用!)

# 保持代码结构完整
if condition1:
    do_something()
elif condition2:
    pass  # 占位,避免语法错误
else:
    do_another_thing()
相关推荐
美狐美颜sdk7 分钟前
什么是美颜SDK?从几何变换到深度学习驱动的美颜算法详解
人工智能·深度学习·算法·美颜sdk·第三方美颜sdk·视频美颜sdk·美颜api
訾博ZiBo13 分钟前
AI日报 - 2025年3月10日
人工智能
waicsdn_haha14 分钟前
Postman v11 安装与API测试入门教程(Windows平台)
人工智能·windows·测试工具·mysql·postman·dbeaver·rest
苏格拉真没有底16 分钟前
python实现mqtt消息转Tcp消息
网络·python·tcp/ip
一尘之中16 分钟前
从青铜巨人到硅基生命:机器人文明的意识觉醒之路--三千年人类想象与科技突破的双螺旋演进)
人工智能·科技·机器人
liruiqiang0516 分钟前
如何理解检索增强生成
人工智能
天才测试猿23 分钟前
功能测试详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
秦南北33 分钟前
国内领先的宠物类电商代运营公司品融电商
大数据·人工智能·电商
龚大龙1 小时前
机器学习(李宏毅)——Domain Adaptation
人工智能·机器学习
vortex51 小时前
在Kali中使用虚拟环境安装python工具的最佳实践:以 pwncat 为例
linux·python·网络安全·渗透测试·pip·kali