正在加载 Python 环境…
← 第33课 第34课:装饰器:给函数穿新衣服 第35课 →

第34课:装饰器:给函数穿新衣服

函数是一等公民

在 Python 里,函数和数字、字符串一样,可以当参数传递,也可以当返回值

💻 在 Thonny 运行:函数当参数
💻 在 Thonny 运行:函数当返回值

🖥️ 计算机小知识

把函数当变量传来传去,这不只是 Python 的花招——这是一种编程思想,叫函数式编程

函数式编程的核心:函数像数据一样可以被创建、传递、组合。LISP(1958年)是第一个函数式语言,比 Python 早了30多年!Python 从函数式编程借鉴了很多好东西:map()filter()lambda、装饰器……

不同的编程思想像不同的工具:过程式 = 按步骤来,面向对象 = 分角色来,函数式 = 组合小函数来。高手会根据问题选择最合适的工具。

手写第一个装饰器

装饰器 = 接收一个函数,返回一个增强版函数:

💻 在 Thonny 运行:第一个装饰器

@ 语法更优雅——效果完全一样:

💻 在 Thonny 运行:@ 语法糖

装饰带参数的函数

💻 在 Thonny 运行:装饰带参数的函数

带参数的装饰器

如果装饰器自己也要接收参数,就多包一层:

💻 在 Thonny 运行:带参数的装饰器

functools.wraps

装饰器会把原函数的名字和文档覆盖掉。用 @wraps 修复:

💻 在 Thonny 运行:用 wraps 保留原函数信息

练习

💻 在 Thonny 运行:写一个 @debug 装饰器