Python 核心 · #4 / 11

函数 + 作用域

可复用的逻辑与整洁的代码

为什么重要

函数让你的逻辑可复用、可测试、可读。

核心思想

函数是一个小程序:输入 → 处理 → 输出。默认参数把一个函数变成许多个;*args / **kwargs 让它能接受可变数量的参数。作用域遵循 LEGB 规则:Local(局部)→ Enclosing(闭包)→ Global(全局)→ Built-in(内置)。

试一试

默认参数 + 关键字参数:

def greet(name, greeting="Hello"):
  return f"{greeting}, {name}!"

print(greet("Ada"))
print(greet("Linus", greeting="Hi"))
print(greet(greeting="Howdy", name="Margaret"))
not loaded

*args / **kwargs 捕获多余的位置参数和关键字参数:

def describe(*things, **labels):
  for t in things:
      print("-", t)
  for k, v in labels.items():
      print(k, "=", v)

describe("apple", "banana", "cherry", colour="red", taste="sweet")
not loaded

作用域:函数能看到外层的名字,但若不使用 nonlocal / global 就无法重新绑定它们:

counter = 0
def inc():
  global counter
  counter += 1

inc(); inc(); inc()
print("counter:", counter)

def outer():
  x = 1
  def inner():
      nonlocal x
      x += 10
  inner()
  print("outer.x:", x)

outer()
not loaded

按数据类型划分的函数模式

函数的形态往往跟随它所处理的类型。下面这三种模式直接通向后面的数据结构课程:

快速检查

小练习

该做与不该做

常见错误

关键要点