流程控制指的是程序中指令执行的顺序,即决定哪条语句什么时候执行。默认情况下代码是从上往下一行一行执行,但加入控制结构后,程序可以:
这些改变正常顺序的行为统称为流程控制。
条件判断(Conditional Statements)
条件判断用于根据条件的真值(True/False)来控制程序执行哪一段代码。
if 语句
基本结构:
示例:
1 2 3
| x = 10 if x > 5: print("x 大于 5")
|
if — else 语句
基本结构:
示例:
1 2 3 4 5
| age = 16 if age >= 18: print("成年") else: print("未成年")
|
if — elif — else(多分支)
elif 是 “else if” 的缩写,用于添加多个条件判断:
基本结构:
1 2 3 4 5 6
| if condition: elif condition: else:
|
示例:
1 2 3 4 5 6 7
| score = 75 if score >= 90: print("优秀") elif score >= 60: print("及格") else: print("不及格")
|
当第一个条件满足时,后续 elif 和 else 都不会再判断
循环结构
循环可以重复执行一段代码,直到特定条件满足或序列结束。
for 循环
for 用于遍历序列(如列表、字符串、range 等):
基本结构:
1 2 3 4 5
| for 变量 in 可迭代对象:
else:
|
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| for i in range(5): print(i)
fruits = ["apple", "banana", "cherry"] for fruit in fruits: print(fruit)
for index, fruit in enumerate(fruits): print(index, fruit)
person = {"name": "Alice", "age": 30, "city": "Beijing"}
for key in person: print(key)
for value in person.values(): print(value)
for key, value in person.items(): print(key, value)
for i in range(5): print(i) else: print("Loop completed")
|
while 循环
while 会只要条件为真就一直执行:
基本结构:
1 2 3 4 5 6 7 8
| while condition: else: while True:
|
1 2 3 4 5 6
| count = 1 while count <= 3: print(count) count += 1 else: print("count = ", count)
|
输出:
注意要在循环内修改条件,否则可能变成无限循环
循环跳转控制语句(Loop Control)
Python 提供一些关键字来改变循环执行的流程:break continue 和 pass。
break — 提前退出循环
break 会 立刻停止当前循环(包括 for 和 while),不再执行后续的循环判断:
1 2 3 4
| for i in range(5): if i == 3: break print(i)
|
输出:
循环当 i == 3 时被打断,后面的值不再输出。
continue — 跳过本次迭代
continue 会跳过当前循环剩余的代码,直接进行下一次循环, continue不会中断循环,而是在循环内部判断条件满足时,跳过后续逻辑的执行:
1 2 3 4
| for i in range(5): if i == 2: continue print(i)
|
输出:
当 i == 2 时跳过打印。
pass — 空操作(占位符)
pass 什么都不做,只是为了语法上保持结构有效:
1 2 3 4
| for i in range(3): if i == 1: pass print(i)
|
输出:
pass 常用于函数体、类体等暂时未实现的地方
match匹配
match语句接受一个表达式并把它的值与一个或多个 case 块给出的一系列模式进行比较。只有第一个匹配的模式会被执行,并且它还可以提取值的组成部分(序列的元素或对象的属性)赋给变量。如果没有匹配的case,则不执行任何分支。
简单结构:
- 用
| 将多个字面值组合到一个模式中
_作为通配符 ,所有case不匹配时,执行的逻辑
return 的使用,需要将match作为函数的返回
- 可以用来匹配 常量值 枚举(
Enum) 和 类(Class)
函数、枚举和类后续讲解
1 2 3 4 5 6 7
| match expression: case condition | condition: return value; case condition: case _:
|
示例:
1 2 3 4 5 6 7 8 9 10
| import random
rad = random.randint(0, 10) match rad: case 0 | 1| 2: print("Low") case 3 | 4 : print("Medium") case _: print("High")
|
匹配类时,可以将匹配结果绑定到类属性,同时可以通过 if 增加守卫子句(需要满足if条件)
1 2 3 4 5
| match 类实例: case 类(属性) if 条件: case 类(属性):
|
自定义类需要在类中设置特殊属性 __match_args__,为属性指定其在match模式中对应的位置。若设为 ("x", "y"),则以下模式相互等价(且都把属性 y 绑定到变量 var)
1 2 3 4
| Point(1, var) Point(1, y=var) Point(x=1, y=var) Point(y=var, x=1)
|
如果不设置__match_args__会报如下错误:
1
| TypeError: Point() accepts 0 positional sub-patterns (2 given)
|
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Point: __match_args__ = ('x', 'y') def __init__(self, x, y): self.x = x self.y = y
point = Point(0, 5)
match point: case Point(x, y) if x == y: print(f"Y=X at {x}") case Point(x, y): print(f"Not on the diagonal")
|
匹配枚举Enum
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| from enum import Enum class Color(Enum): RED = 'red' GREEN = 'green' BLUE = 'blue'
color = Color.RED
match color: case Color.RED: print("I see red!") case Color.GREEN: print("Grass is green") case Color.BLUE: print("I'm feeling the blues :(")
|