简单说明Python中的装饰器的用法
作者:C Wong 时间:2022-01-30 21:57:32
装饰器对与Python新手以至于熟悉Python的人都是一个难理解, 难写的东西. 那么今天就分享一下我对Python 装饰器的理解
所谓装饰器仅仅是一种语法糖, 可作用的对象可以是函数也可以是类, 装饰器本身是一个函数, 其主要工作方式就是将被装饰的类或者函数当作参数传递给装饰器函数, 比如定义如下装饰器
import time
def run_time(func):
def wrapper(*args, **kwargs):
start = time.time()
r = func(*args, **kwargs)
print time.time() - start
return r
return wrapper
我们用这个装饰器装饰一个test函数
@run_time
def test():
print "just a test"
前面说过其实装饰器就是一个语法糖, 就是将被装饰的函数作为参数传递给装饰器函数, 所以上面可以展开为
test = run_time(test)
装饰器将在解释器运行一开始就被加载, 从而将被装饰的函数将被展开成如上方式, 因为 run_time装饰器返回wrapper函数, 所以当调用test函数时其实就是对wrapper的调用
如果你在Python shell下执行以上语句就会发现定义完test函数然后查看test时, shell所展示的是wrapper函数
接下来说说如何编写带参数的装饰器, 大家如果细心的话就可以发现其实带参数的装饰器是经过调用"装饰器"函数返回的一个装饰器, 之所以装饰器上打引号是说明其实这个所谓的"装饰器"只不过是一个普通的函数, 但这个普通的函数返回一个装饰器, 可以参看下面例子:
import time
def route(url):
def decorator(func):
func.__url__ = url
return func
return decorator
@route(r"/")
def index():
return "Hi"
大家可以发现在使用route装饰器时我们其实是调用了route函数, route函数返回一个decorator装饰器, 因为我们不需要在装饰器内运行函数, 所以不需要一个wrapper函数来收集参数.
标签:Python


猜你喜欢
Python实现七彩蟒蛇绘制实例代码
2022-04-28 20:03:37

行转列之SQL SERVER PIVOT与用法详解
2024-01-28 10:41:37
详解Python单元测试的两种写法
2023-02-13 06:04:20

SqlServer数据库提示 “tempdb” 的日志已满 问题解决方案
2024-01-28 10:39:47
JavaScript实现省市县三级级联特效
2024-04-18 10:55:56
属性与 @property 方法让你的python更高效
2023-02-02 08:20:18
利用Python实现绘制3D爱心的代码分享
2021-03-30 23:25:12

Python环境下安装使用异步任务队列包Celery的基础教程
2023-08-23 23:06:48
ASP程序开发注意的安全事项
2010-05-03 10:55:00
Django修改app名称和数据表迁移方案实现
2022-12-14 17:09:11
CASE表达式实现基于条件逻辑来返回一个值
2024-01-19 23:18:45

Matlab中关于argmax、argmin函数的使用解读
2023-06-27 20:36:53

jquery动态遍历Json对象的属性和值的方法
2024-06-09 00:53:36
PHP实现的简单排列组合算法应用示例
2023-11-18 16:28:40
python pandas dataframe 按列或者按行合并的方法
2022-04-15 13:25:19
Python将文字转成语音并读出来的实例详解
2021-11-08 21:23:34

Vue+Django项目部署详解
2024-04-30 10:20:16
Python实现捕获异常发生的文件和具体行数
2023-12-11 18:14:52
php 无限级 SelectTree 类
2024-05-13 09:25:03
安装Anaconda3及使用Jupyter的方法
2022-04-13 18:15:21
