Skip to content

Python 控制流与函数速查:if/for/while、range/enumerate/zip、break/continue、函数定义、参数类型(默认/关键字/*args/**kwargs)、lambda、作用域、异常处理。一段代码一个点,看完即用。

速查总览

python
# === 条件 ===
if x > 0:
    print("pos")
elif x == 0:
    print("zero")
else:
    print("neg")

# === for 循环 ===
for i in range(5):        # 0..4
    pass
for idx, val in enumerate(lst):   # 同时取下标和值
    print(idx, val)
for a, b in zip(list1, list2):    # 并行遍历两个列表
    pass
for k, v in d.items():    # 遍历字典
    pass
for i in range(10):
    if i == 3: continue   # 跳过本次
    if i == 8: break      # 终止循环
else:                     # 循环没被 break 才执行
    print("completed")

# === while ===
while x < 10:
    x += 1

# === 异常 ===
try:
    r = 1 / x
except ZeroDivisionError as e:
    print("除零", e)
except (TypeError, ValueError):
    print("类型或值错误")
else:                    # 无异常时执行
    print("成功")
finally:                 # 无论是否异常都执行
    print("清理")

函数速查

python
# === 定义与调用 ===
def greet(name, greeting="你好"):    # 默认参数
    """文档字符串:说明函数用途"""
    return f"{greeting}, {name}"

greet("张三")                        # 用默认
greet("张三", greeting="嗨")         # 关键字参数(可读性更好)

# === 任意数量参数 ===
def f(*args, **kwargs):
    # args → 元组 (1,2,3);kwargs → 字典 {'a':1}
    pass

f(1, 2, 3, a=1, b=2)

# === 解包传参 ===
lst = [1, 2, 3]
f(*lst)          # 列表解包成位置参数
d = {"a": 1}
f(**d)           # 字典解包成关键字参数

# === lambda 匿名函数 ===
f = lambda x: x * 2        # 等价 def f(x): return x*2
sorted(lst, key=lambda x: x[1])   # 按第二元素排序

# === 作用域 ===
# LEGB:局部 → 外层 → 全局 → 内置
x = 10            # 全局
def f():
    global x      # 声明修改全局
    x = 20
    nonlocal y    # 嵌套函数中修改外层局部

# === 返回多个值 ===
def minmax(lst):
    return min(lst), max(lst)
lo, hi = minmax(lst)   # 自动解包成元组

内置函数高频速查

python
map(func, iterable)        # 逐个应用:map(str, [1,2])
filter(func, iterable)     # 过滤:filter(lambda x: x>0, lst)
sorted(iterable, key=, reverse=)  # 排序
enumerate(iterable, start=0)
zip(*iterables)            # 拉链
any(lst) / all(lst)        # 任一/全部为真
len / sum / max / min / abs / round
type(x) / isinstance(x, int)
print(*objs, sep=" ", end="\n")
input("提示")              # 读一行字符串
repr(x) / str(x)

常见坑

  1. else 挂在循环上for...elseelse 在循环未被 break 时执行——不是"否则跳过循环"
  2. 默认参数求值一次def f(x, arr=[])arr 是同一个列表——用 arr=None
  3. *args 顺序def f(a, b=1, *args, **kwargs)——位置、默认、*args**kwargs 固定顺序
  4. lambda 里别写复杂逻辑:只能写单个表达式;多行逻辑用普通函数
  5. 异常别裸 except::会吞掉 KeyboardInterrupt 等;至少 except Exception:
  6. try/finally 用于释放资源:但 Pythonic 首选 with(见Python-速查-常用模块与文件IO的文件部分)

一句话总结

遍历三件套 range/enumerate/zip 覆盖九成循环;函数参数顺序固定为位置 → 默认 → *args**kwargs,两个经典坑是 for...else 只在没 break 时执行、默认参数 arr=[] 跨调用共享。

相关概念