[Python编程] Python3 控制流程
对于刚接触 Python 的初学者来说,控制流程是编写逻辑清晰代码的基础,它决定了程序代码的执行顺序。Python3 的控制流程主要包含条件语句、循环语句、推导式和迭代器这几大核心内容。
一、条件语句:让程序 “做判断”
条件语句的作用是根据不同的条件执行不同的代码块,就像我们日常生活中根据天气情况决定是否带伞一样。Python3 中的条件语句主要有 if 语句、if-elif-else 语句、if 嵌套以及 Python 3.10 新增的 match...case 语句。
1️⃣if 语句
if 语句是最基础的条件判断语句,它的逻辑是:如果满足某个条件,就执行对应的代码块;如果不满足,则跳过该代码块。
- 语法格式
python
if condition:statement_block # 当condition为True时执行的代码
其中,condition
是一个表达式,其结果为布尔值(True 或 False);statement_block
是当条件成立时要执行的代码,需要注意的是,这里的代码块必须缩进(通常是 4 个空格),这是 Python 语法的规定。
- 实例演示
python
运行
var1 = 100
if var1 == 100: # 条件:var1是否等于100,结果为Trueprint("if表达式条件为True")print(var1) # 执行该语句,输出100var2 = 0
if var2 != 0: # 条件:var2是否不等于0,结果为Falseprint("if表达式条件为True") # 该语句不执行
print(var2) # 无论if条件是否成立,该语句都会执行,输出0
print("Good bye!") # 输出"Good bye!"
运行结果:
plaintext
if表达式条件为True
100
0
Good bye!
2️⃣if-elif-else 语句
当需要判断多个条件时,就可以使用 if-elif-else 语句。它会依次判断每个条件,只要有一个条件成立,就执行对应的代码块,之后不再判断后续条件;如果所有条件都不成立,则执行 else 后的代码块。
- 语法格式
python
if condition_1:statement_block_1 # 条件1成立时执行
elif condition_2:statement_block_2 # 条件1不成立,条件2成立时执行
...
else:statement_block_n # 所有条件都不成立时执行
- 实例演示
假设我们要根据学生的考试成绩划分等级(90 分及以上为优秀,80-89 分为良好,60-79 分为及格,60 分以下为不及格):
python
score = 85
if score >= 90:print("成绩等级:优秀")
elif score >= 80:print("成绩等级:良好")
elif score >= 60:print("成绩等级:及格")
else:print("成绩等级:不及格")
运行结果:
plaintext
成绩等级:良好
3️⃣if 嵌套
if 嵌套指的是在一个 if 语句的代码块中又包含另一个或多个 if 语句,用于处理更复杂的条件判断场景。
- 语法格式
python
if outer_condition:statement_block_outerif inner_condition:statement_block_inner # 外层条件成立,且内层条件也成立时执行...
- 实例演示
判断一个数字是否能被 2 整除,在能被 2 整除的前提下,再判断是否能被 3 整除:
python
num = int(input("输入一个数字:"))
if num % 2 == 0:if num % 3 == 0:print("你输入的数字可以整除2和3")else:print("你输入的数字可以整除2但不能整除3")
else:if num % 3 == 0:print("你输入的数字可以整除3但不能整除2")else:print("你输入的数字不能整除2和3")
当输入 15 时,运行结果:
plaintext
你输入的数字可以整除3但不能整除2
4️⃣match...case 语句(Python 3.10+)
match...case 语句类似于其他编程语言中的 switch 语句,被称为 “模式匹配” 或 “结构化匹配”。它会将 match 后的对象依次与 case 后的内容进行匹配,匹配成功则执行对应的代码块,若所有 case 都不匹配,则执行 case 后的代码块( 可以匹配一切)。
- 语法格式
python
match subject:case <pattern_1>:<action_1> # 匹配pattern_1时执行case <pattern_2>:<action_2> # 匹配pattern_2时执行...case _:<action_wildcard> # 所有pattern都不匹配时执行
- 基本模式匹配:匹配具体的值
python
x = 10
match x:case 10:print("x is 10")case 20:print("x is 20")case _:print("x is something else")
运行结果:
plaintext
x is 10
- 序列模式匹配:匹配元组、列表等序列的结构
python
point = (2, 3)
match point:case (0, 0):print("origin") # 匹配(0,0)时执行case (0, y):print(f"point is on the Y axis at (0, {y})") # 第一个元素为0时执行case (x, 0):print(f"point is on the X axis at ({x}, 0)") # 第二个元素为0时执行case (x, y):print(f"point is at ({x}, {y})") # 匹配任意两个元素的元组case _:print("Not a point")
运行结果:
plaintext
point is at (2, 3)
- OR 模式:使用 | 表示一个或多个模式,只要匹配其中一个即可
python
x = 2
match x:case 1 | 2 | 3:print("x is 1, 2, or 3")case _:print("x is something else")
运行结果:
plaintext
x is 1, 2, or 3
- 守卫:在模式匹配中使用 if 添加额外的条件,只有同时满足模式和条件才会执行
python
x = 10
match x:case x if x > 5:print("x is greater than 5")case _:print("x is 5 or less")
运行结果:
plaintext
x is greater than 5
5️⃣if 中常用的操作运算符
在条件判断中,经常会用到各种比较运算符来构建条件,以下是常用的操作运算符:
操作符 | 描述 |
---|---|
< | 小于 |
<= | 小于或等于 |
> | 大于 |
>= | 大于或等于 |
== | 等于,比较两个值是否相等 |
!= | 不等于 |
二、循环语句:让程序 “重复做”
循环语句用于让程序重复执行某一段代码块,直到满足特定条件才停止。Python3 中的循环语句主要有 while 循环和 for 循环。
1️⃣while 循环
while 循环根据条件判断是否重复执行代码块,只要条件为 True,就会一直执行循环体;当条件变为 False 时,循环结束。
- 语法格式
python
while condition:statements # 条件为True时重复执行的代码块
- 实例演示:计算 1 到 100 的和
python
n = 100
sum = 0
counter = 1
while counter <= n: # 条件:counter是否小于等于100sum = sum + counter # 累加求和counter += 1 # counter自增1,避免无限循环
print("1到%d之和为:%d" % (n, sum))
运行结果:
plaintext
1到100之和为:5050
while 循环使用 else 语句当 while 后面的条件语句为 False 时,会执行 else 后的代码块。
- 语法格式
python
while <expr>:<statement(s)> # 条件为True时执行
else:<additional_statement(s)> # 条件为False时执行
- 实例演示
python
count = 0
while count < 5:print(count, "小于5")count = count + 1
else:print(count, "大于或等于5")
运行结果:
plaintext
0 小于5
1 小于5
2 小于5
3 小于5
4 小于5
5 大于或等于5
2️⃣for 循环
for 循环可以遍历任何可迭代对象(如列表、字符串、元组、range 对象等),它会依次取出可迭代对象中的每个元素,并执行对应的代码块。
- 语法格式
python
for <variable> in <sequence>:<statements> # 遍历每个元素时执行的代码
else:<statements> # 循环正常结束(未被break中断)时执行
- 遍历列表
python
sites = ["x", "y", "k", "j"]
for site in sites:print(site)
print("-" * 20)
运行结果:
plaintext
x
y
k
j
--------------------
- 遍历字符串中的每一个字符
python
word = 'xykj'
for letter in word:print(letter)
print("-" * 20)
运行结果:
plaintext
x
y
k
j
--------------------
- 遍历数字(使用 range () 函数)range () 函数用于生成一个整数序列,语法为 range (start, stop, step),其中 start 为起始值(默认 0),stop 为结束值(不包含该值),step 为步长(默认 1)。
python
print("-" * 20)
for num in range(5): # 生成0-4的整数序列print(num)
运行结果:
plaintext
--------------------
0
1
2
3
4
for...else 语句
for...else 语句中,当循环正常执行完毕(即遍历完可迭代对象中的所有元素,未被 break 中断)后,会执行 else 子句中的代码;如果在循环过程中遇到 break 语句中断循环,则不会执行 else 子句。
- 实例 1:循环正常结束
python
运行
for x in range(6):print(x)
else:print("finished!")
运行结果:
plaintext
0
1
2
3
4
5
finished!
- 实例 2:循环被 break 中断
python
运行
for x in range(6):if x == 3:break # 当x等于3时,中断循环print(x)
else:print("finished!") # 该语句不执行
运行结果:
plaintext
0
1
2
3️⃣break 和 continue 语句
break 和 continue 语句用于控制循环的执行流程,它们通常与 if 语句配合使用。
- break 语句
break 语句可以跳出 for 和 while 的循环体,一旦执行 break 语句,循环会立即终止,并且任何对应的循环 else 块都不会执行。
- 实例演示
python
n = 5
while n > 0:n -= 1if n == 2: # 当n等于2时,跳出循环breakprint(n)
print('循环结束。')
运行结果:
plaintext
4
3
循环结束。
- continue 语句
continue 语句用于跳过当前循环块中的剩余语句,然后直接开始下一轮循环,并不会终止整个循环。
- 实例演示
python
n = 5
while n > 0:n -= 1if n == 2: # 当n等于2时,跳过当前循环的剩余语句continueprint(n)
print("循环结束。")
运行结果:
plaintext
4
3
1
0
循环结束。
三、推导式:简洁高效的数据处理方式
Python 推导式是一种强大且简洁的语法,它可以从一个数据序列快速构建另一个新的数据序列,适用于生成列表、字典、集合和生成器(元组推导式返回生成器对象)。使用推导式可以让代码更简洁,但要注意保持可读性,避免表达式过于复杂。
1️⃣列表(list)推导式
列表推导式用于快速生成一个新的列表,它的语法简洁,执行效率较高。
- 语法格式
python
[expression for item in iterable if condition]
expression
:生成列表元素的表达式,可以是变量、函数调用等。item
:可迭代对象中的每个元素。iterable
:可迭代对象,如列表、元组、字符串、range 对象等。condition
(可选):筛选条件,只有满足条件的元素才会被用于生成新列表。
- 实例演示
计算 30 以内可以被 3 整除的整数
python
multiples = [i for i in range(30) if i % 3 == 0]
print(multiples)
运行结果:
plaintext
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
- 过滤掉长度小于或等于 3 的字符串列表,并将剩下的转换成大写字母
python
names = ['Bob', 'Tom', 'alice', 'jerry', 'Wendy', 'Smith']
new_names = [name.upper() for name in names if len(name) > 3]
print(new_names)
运行结果:
plaintext
['ALICE', 'JERRY', 'WENDY', 'SMITH']
2️⃣字典(dict)推导式
字典推导式用于快速生成一个新的字典,它会根据指定的规则生成字典的键和值。
- 语法格式
python
{key_expr: value_expr for value in collection}
# 或包含筛选条件
{key_expr: value_expr for value in collection if condition}
key_expr
:生成字典键的表达式。value_expr
:生成字典值的表达式。collection
:可迭代对象,用于提供生成键值对的数据。condition
(可选):筛选条件,满足条件的元素才会用于生成字典。
- 实例演示:提供三个数字,以三个数字为键,三个数字的平方为值来创建字典
python
dic = {x: x ** 2 for x in (2, 4, 6)}
print(dic)
运行结果:
plaintext
{2: 4, 4: 16, 6: 36}
3️⃣集合(set)推导式
集合推导式用于快速生成一个新的集合,集合具有元素唯一、无序的特点,所以集合推导式会自动去除重复元素。
- 语法格式
python
运行
{expression for item in Sequence}
# 或包含筛选条件
{expression for item in Sequence if condition}
expression
:生成集合元素的表达式。item
:可迭代对象(Sequence)中的每个元素。Sequence
:可迭代对象,如列表、元组、字符串等。condition
(可选):筛选条件,满足条件的元素才会用于生成集合。
- 实例演示:
计算数字 1,2,3 的平方数
python
set_new = {i ** 2 for i in (1, 2, 3)}
print(set_new)
运行结果:
plaintext
{1, 4, 9}
4️⃣元组(tuple)推导式
元组推导式的语法与列表推导式类似,但它返回的结果是一个生成器对象,而不是直接生成元组。如果需要将其转换为元组,可以使用 tuple () 函数。
- 语法格式
python
(expression for item in Sequence)
# 或包含筛选条件
(expression for item in Sequence if condition)
- 各参数含义与列表推导式相同。
- 实例演示:生成一个包含数字 1~9 的元组
python
a = (x for x in range(1, 10))
print(a) # 输出生成器对象
print(tuple(a)) # 使用tuple()函数将生成器对象转换为元组
运行结果:
plaintext
<generator object <genexpr> at 0x000001E20E465F00>
(1, 2, 3, 4, 5, 6, 7, 8, 9)
5️⃣推导式使用注意事项
- 推导式可以嵌套,但嵌套层数过多会使代码难以理解和维护,建议尽量减少嵌套层数。
- 推导式可以包含多个 for 子句和 if 条件,但要保持简洁明了,优先考虑代码的可读性。
- 处理大数据集时,要注意推导式的内存消耗。虽然推导式通常比传统循环执行速度快,但它会一次性生成所有数据并存储在内存中,对于超大数据集可能会导致内存不足,此时可以考虑使用生成器(如元组推导式返回的生成器对象),生成器会按需生成数据,减少内存消耗。
四、迭代器:便捷访问集合元素
迭代是 Python 中访问集合元素的一种重要方式,而迭代器则是实现迭代的工具。迭代器是一个可以记住遍历位置的对象,它从集合的第一个元素开始访问,直到所有元素被访问完结束,并且只能往前遍历,不能后退。
1️⃣迭代器的基本方法
迭代器有两个核心方法:
iter()
:用于创建迭代器对象,将可迭代对象(如列表、字符串、元组等)转换为迭代器。next()
:用于获取迭代器的下一个元素,每次调用 next () 方法,迭代器会移动到下一个位置;当迭代器中没有更多元素时,调用 next () 方法会抛出 StopIteration 异常。
2️⃣创建和使用迭代器
- 使用 iter () 创建迭代器并通过 next () 访问元素
python
list1 = [1, 2, 3, 4]
it = iter(list1) # 创建迭代器对象
print(next(it)) # 输出迭代器的下一个元素,结果为1
print(next(it)) # 输出迭代器的下一个元素,结果为2
# 继续调用next(),直到遍历完所有元素
print(next(it)) # 3
print(next(it)) # 4
# print(next(it)) # 此时已无元素,会抛出StopIteration异常
运行结果:
plaintext
1
2
3
4
- 使用 for 语句遍历迭代器
除了使用 next () 方法,我们还可以使用 for 语句直接遍历迭代器,for 语句会自动处理 StopIteration 异常,当迭代器中没有元素时,循环会自动结束。
python
运行
list1 = [1, 2, 3, 4]
it = iter(list1) # 创建迭代器对象
for x in it:print(x, end="") # 输出迭代器中的元素,end=""表示不换行
运行结果:
plaintext
1234
3️⃣可迭代对象与迭代器的关系
可迭代对象(Iterable)是指可以被转换为迭代器的对象,如列表、字符串、元组、字典、集合、range 对象等。判断一个对象是否为可迭代对象,可以使用 isinstance () 函数并结合 collections.abc.Iterable 类;判断一个对象是否为迭代器,可以结合 collections.abc.Iterator 类。
python
from collections.abc import Iterable, Iteratorlist1 = [1, 2, 3]
print(isinstance(list1, Iterable)) # True,列表是可迭代对象
print(isinstance(list1, Iterator)) # False,列表不是迭代器it = iter(list1)
print(isinstance(it, Iterable)) # True,迭代器是可迭代对象
print(isinstance(it, Iterator)) # True,迭代器是Iterator类型
五、总结
Python3 的控制流程是编写 Python 程序的基础,本文详细介绍了条件语句、循环语句、推导式和迭代器这四大核心内容:
- 条件语句:包括 if、if-elif-else、if 嵌套和 match...case,用于根据不同条件执行不同代码块,match...case 为 Python 3.10 新增特性,功能强大。
- 循环语句:while 循环根据条件重复执行代码,for 循环遍历可迭代对象;break 用于终止循环,continue 用于跳过当前循环剩余语句;循环还可搭配 else 使用。
- 推导式:包括列表、字典、集合和元组推导式,能简洁高效地生成新数据序列,使用时需注意可读性和内存消耗。
- 迭代器:通过 iter () 创建,next () 获取下一个元素,可使用 for 语句遍历,是便捷访问集合元素的工具。