Python 开发手册PYTHON

CHAPTER 02函数与对象 · FUNCTIONS & OOP

函数与
面向对象

函数是 Python 的一等公民:可作参数、返回值、闭包。装饰器是元编程利器;类与 dataclass 让数据建模简洁有力。

开始阅读难度入门约2.5小时
02.1

一等函数

函数可作为变量赋值、存入容器、当作参数与返回值,这是函数式风格的基础。

def apply(op, a, b): return op(a, b)
add = lambda x, y: x + y
print(apply(add, 2, 3))        # 5
02.2

lambda 与高阶

lambda 表达匿名小函数;map/filter/sorted 等高阶函数配合可声明式处理集合(推导式常更可读)。

names = sorted(users, key=lambda u: u.name)
values = list(map(int, ["1", "2", "3"]))
02.3

闭包

内部函数捕获外层变量形成闭包,常用于工厂函数与状态封装。

def counter():
    n = 0
    def inc():
        nonlocal n
        n += 1
        return n
    return inc
c = counter(); print(c(), c())   # 1 2
02.4

装饰器

装饰器是"接收函数、返回新函数"的高阶函数,用于日志、缓存、权限等横切逻辑,语法用 @。

import time, functools
def timed(f):
    @functools.wraps(f)
    def wrapper(*a, **k):
        t = time.time(); r = f(*a, **k); print(f"{f.__name__}: {time.time()-t:.3f}s")
        return r
    return wrapper
@timed
def slow(): time.sleep(0.1)
02.5

类与继承

用 class 建模,__init__ 初始化、self 指代实例;支持单/多重继承与方法重写。

class Animal:
    def __init__(self, name): self.name = name
    def speak(self): raise NotImplementedError
class Dog(Animal):
    def speak(self): return f"{self.name} 汪"
02.6

dataclass

@dataclass 自动生成 __init__/__repr__/__eq__,让数据类声明变得极简。

from dataclasses import dataclass, field
@dataclass
class User:
    id: int
    name: str
    tags: list[str] = field(default_factory=list)
可变默认用 field

与函数默认参数同理,dataclass 中用 field(default_factory=list) 避免共享可变默认。

02.7

特殊方法

__str__/__eq__/__len__ 等魔法方法让自定义对象融入语言内建操作。

class Vector:
    def __init__(self, x, y): self.x, self.y = x, y
    def __add__(self, o): return Vector(self.x+o.x, self.y+o.y)
    def __repr__(self): return f"V({self.x},{self.y})"
02.8

常见陷阱

装饰器丢失原函数元信息?

用 functools.wraps(f) 包裹内层,保留 __name__/__doc__,对文档与调试至关重要。

类属性共享可变默认值?

类变量若赋可变对象会在实例间共享。可变状态应放在 __init__ 里作为实例属性。

02.9

实战练习

延伸资源