python核心语法(二)- 流程控制语句

Python 核心语法(二)—— 流程控制语句(基于 Python 3.12/3.14 官方文档,2026 年最新版)

这是 Python 入门到中级的最核心章节(官方教程第 4 章“更多控制流工具”)。掌握后,你能写出清晰、高效、Pythonic 的代码,面试中“流程控制”题基本无敌。

下面按官方结构 + 实战 + 面试点系统讲解,所有示例均可在 Python 3.12+ 直接运行。

1. if 语句(条件判断)

核心:最常用条件分支,支持 elif(else if 的缩写)和 elseif-elif-else 可替代其他语言的 switch

x = int(input("请输入一个整数: "))

if x < 0:
    print('负数已改为零')
    x = 0
elif x == 0:
    print('零')
elif x == 1:
    print('单个')
else:
    print('更多')

面试金句elif 避免深层缩进,逻辑清晰。复杂多值判断推荐用下面的 match

2. for 语句(迭代循环)

核心:Python 的 forfor-each 风格,遍历任意可迭代对象(list、tuple、str、dict、range、文件等),按出现顺序迭代。

words = ['cat', 'window', 'defenestrate']
for w in words:
    print(w, len(w))

# 遍历字典(推荐用 .items())
users = {'Hans': 'active', 'Éléonore': 'inactive'}
for user, status in users.items():
    if status == 'inactive':
        print(user, '已删除')

重要注意(面试常问):

  • 迭代时不要直接修改被遍历的序列(会导致跳过元素或无限循环)。
  • 正确做法:迭代副本 users.copy().items() 或新建新集合。

3. range() 函数(数字序列生成器)

核心:生成等差数列,惰性求值(不一次性创建列表,省内存)。不包含结束值。

for i in range(5):          # 0,1,2,3,4
    print(i)

list(range(5, 10))          # [5,6,7,8,9]
list(range(0, 10, 3))       # [0,3,6,9]
list(range(-10, -100, -30)) # [-10,-40,-70]

# 配合 len() 遍历索引(新手常用)
a = ['Mary', 'had', 'a', 'little', 'lamb']
for i in range(len(a)):
    print(i, a[i])

# 推荐写法:enumerate()
for i, word in enumerate(a):
    print(i, word)

4. while 语句(条件循环)

n = 10
while n > 0:
    n -= 1
    print(n)
else:
    print('循环正常结束')

5. breakcontinue(循环控制)

  • break立即跳出最近一层的 forwhile 循环。
  • continue跳过本次循环剩余代码,直接进入下一次迭代。
# break 示例:找因子
for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, 'equals', x, '*', n//x)
            break
    else:
        print(n, '是质数')   # 注意这个 else!

6. 循环的 else 子句(Python 独有神器!面试高频)

核心规则

  • forwhile 循环正常结束(没有遇到 break)时,才执行 else
  • break 退出则跳过 else

经典用途:“循环找东西,找不到就执行 else”(质数判断、搜索失败处理)。

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            break
    else:
        print(n, '是质数')

7. pass 语句(占位符)

什么都不做,用于语法需要语句但逻辑还没写的情况。

while True:
    pass  # 忙等待 Ctrl+C

class MyEmptyClass:
    pass

def initlog(*args):
    pass  # 以后再实现

8. match 语句(Python 3.10+ 结构化模式匹配,现代神器!)

这是 Python 3.10 引入的最重大语法改进,3.12 进一步优化性能和序列/映射匹配能力。强烈推荐用于多分支、解构、类型判断。

基本语法

def http_error(status):
    match status:
        case 400:
            return "Bad Request"
        case 404:
            return "Not Found"
        case 418:
            return "I'm a teapot"
        case _:                  # 通配符,匹配任意
            return "Something's wrong"

# 解构元组(最常用)
point = (3, 4)
match point:
    case (0, 0):
        print("原点")
    case (0, y):
        print(f"Y={y}")
    case (x, 0):
        print(f"X={x}")
    case (x, y):
        print(f"X={x}, Y={y}")
    case _:
        raise ValueError("不是点")

高级模式(面试加分):

# OR 模式
case 401 | 403 | 404:
    return "Not allowed"

# 序列模式 + * 解包
match [1, 2, 3, 4]:
    case [first, *middle, last]:
        print(first, middle, last)   # 1 [2, 3] 4

# 类模式(需定义 __match_args__)
class Point:
    __match_args__ = ('x', 'y')
    def __init__(self, x, y):
        self.x = x
        self.y = y

match Point(10, 20):
    case Point(x=0, y=y):
        print(f"Y轴: {y}")
    case Point(x=x, y=0):
        print(f"X轴: {x}")

# 守卫(guard)—— 匹配后额外条件
case (x, y) if x == y:
    print(f"对角线上的点 {x}")

match vs if-elif

  • 简单值比较用 if 即可。
  • 需要解构、模式匹配、类型判断时,match 代码更简洁、可读性更高。

一句话总结(面试 30 秒回答版)

“Python 流程控制包括 if-elif-elsefor(遍历可迭代对象)、whilerange()break/continue、循环 else(正常结束才执行)、pass 占位符,以及 Python 3.10+ 引入的 match-case 结构化模式匹配(支持解构、守卫、序列/映射/类模式)。for-elsematch 是 Python 最 Pythonic 的特色。”

这套内容直接来自官方文档,背熟后能轻松应对所有流程控制面试题!

需要我继续出 Python 核心语法(三)—— 函数详解(默认参数、可变参数、lambda、闭包、装饰器等)吗?或者直接给你 配套练习题 + 面试 15 道真题

随时说~ 这系列正在连载,下一讲马上安排!🚀

文章已创建 5041

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部