学习Python装饰器,这一篇文章就够了!看完你就会了

开发 后端
谈装饰器前,还要先要明白一件事,Python 中的函数和 Java、C++不太一样,Python 中的函数可以像普通变量一样当做参数传递给另外一个函数...
 [[227520]]

讲 Python 装饰器前,我想先举个例子,虽有点污,但跟装饰器这个话题很贴切。

学习python装饰器,这一篇文章就够了!看完你就会了

谈装饰器前,还要先要明白一件事,Python 中的函数和 Java、C++不太一样,Python 中的函数可以像普通变量一样当做参数传递给另外一个函数,例如:

学习python装饰器,这一篇文章就够了!看完你就会了

学习python装饰器,这一篇文章就够了!看完你就会了

先来看一个简单例子,虽然实际代码可能比这复杂很多:

学习python装饰器,这一篇文章就够了!看完你就会了

现在有一个新的需求,希望可以记录下函数的执行日志,于是在代码中添加日志代码:

学习python装饰器,这一篇文章就够了!看完你就会了

学习python装饰器,这一篇文章就够了!看完你就会了

学习python装饰器,这一篇文章就够了!看完你就会了

学习python装饰器,这一篇文章就够了!看完你就会了

简单装饰器

学习python装饰器,这一篇文章就够了!看完你就会了

学习python装饰器,这一篇文章就够了!看完你就会了

@ 语法糖

学习python装饰器,这一篇文章就够了!看完你就会了

学习python装饰器,这一篇文章就够了!看完你就会了

学习python装饰器,这一篇文章就够了!看完你就会了

*args、**kwargs

可能有人问,如果我的业务逻辑函数 foo 需要参数怎么办?比如:

学习python装饰器,这一篇文章就够了!看完你就会了

我们可以在定义 wrapper 函数的时候指定参数:

学习python装饰器,这一篇文章就够了!看完你就会了

学习python装饰器,这一篇文章就够了!看完你就会了

学习python装饰器,这一篇文章就够了!看完你就会了

学习python装饰器,这一篇文章就够了!看完你就会了

学习python装饰器,这一篇文章就够了!看完你就会了

比如:

学习python装饰器,这一篇文章就够了!看完你就会了

这时,你就可以把 wrapper 函数指定关键字函数:

学习python装饰器,这一篇文章就够了!看完你就会了

[[227525]]

带参数的装饰器

学习python装饰器,这一篇文章就够了!看完你就会了

学习python装饰器,这一篇文章就够了!看完你就会了

学习python装饰器,这一篇文章就够了!看完你就会了

@use_logging(level="warn")等价于@decorator

类装饰器

学习python装饰器,这一篇文章就够了!看完你就会了

学习python装饰器,这一篇文章就够了!看完你就会了

functools.wraps

学习python装饰器,这一篇文章就够了!看完你就会了

例子:

学习python装饰器,这一篇文章就够了!看完你就会了

学习python装饰器,这一篇文章就够了!看完你就会了

学习python装饰器,这一篇文章就够了!看完你就会了

装饰器顺序

一个函数还可以同时定义多个装饰器,比如:

学习python装饰器,这一篇文章就够了!看完你就会了

学习python装饰器,这一篇文章就够了!看完你就会了

[[227527]]

学习python装饰器,这一篇文章就够了!看完你就会了 

责任编辑:庞桂玉 来源: 今日头条
相关推荐

2023-09-04 08:00:00

开发Java线程

2017-03-13 09:50:46

Python装饰器

2023-09-05 07:55:56

Python网络爬虫

2021-06-07 06:25:35

画流程图开发技能

2022-06-20 09:01:23

Git插件项目

2021-04-08 07:37:39

队列数据结构算法

2018-08-23 16:22:40

2021-09-27 14:50:11

Python代码

2020-08-03 10:00:11

前端登录服务器

2023-04-24 08:00:00

ES集群容器

2019-07-10 15:15:23

JVM虚拟机Java

2017-03-11 22:19:09

深度学习

2020-07-20 13:59:17

服务器项目工程打包

2018-05-22 08:24:50

PythonPyMongoMongoDB

2020-08-17 09:25:51

Docker容器技术

2022-05-26 06:05:16

MySQL数据库

2020-02-18 16:20:03

Redis ANSI C语言日志型

2020-05-14 16:35:21

Kubernetes网络策略DNS

2023-02-10 09:04:27

2022-07-06 12:07:06

Python函数式编程
点赞
收藏

51CTO技术栈公众号