返回介绍

第 7 章 函数装饰器和闭包

发布于 2024-02-05 21:59:47 字数 813 浏览 0 评论 0 收藏 0

有很多人抱怨,把这个特性命名为“装饰器”不好。主要原因是,这个名称与 GoF 书 1 使用的不一致。装饰器这个名称可能更适合在编译器领域使用,因为它会遍历并注解句法树。

——“PEP 318 — Decorators for Functions and Methods”

1指 1995 年出版的英文原版《设计模式:可复用面向对象软件的基础》,作者是四个人,人们称之为“四人组”(Gang of Four)。

函数装饰器用于在源码中“标记”函数,以某种方式增强函数的行为。这是一项强大的功能,但是若想掌握,必须理解闭包。

nonlocal 是新近出现的保留关键字,在 Python 3.0 中引入。作为 Python 程序员,如果严格遵守基于类的面向对象编程方式,即便不知道这个关键字也不会受到影响。然而,如果你想自己实现函数装饰器,那就必须了解闭包的方方面面,因此也就需要知道 nonlocal。

除了在装饰器中有用处之外,闭包还是回调式异步编程和函数式编程风格的基础。

本章的最终目标是解释清楚函数装饰器的工作原理,包括最简单的注册装饰器和较复杂的参数化装饰器。但是,在实现这一目标之前,我们要讨论下述话题:

Python 如何计算装饰器句法

Python 如何判断变量是不是局部的

闭包存在的原因和工作原理

nonlocal 能解决什么问题

掌握这些基础知识后,我们可以进一步探讨装饰器:

实现行为良好的装饰器

标准库中有用的装饰器

实现一个参数化装饰器

下面将首先介绍装饰器的基础知识,然后再讨论上面列出的各个话题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文