python装饰器简单使用
2024-09-20 22:55:15
装饰器和闭包关联很大,要先明白闭包是什么
原始代码:
def foo():
print('fcc')
增加装饰器
from time import ctime,sleep
def w(fcc):
def inner():
print("%s called %s" % (fcc.__name__,ctime())) fcc()
return inner @w
def foo():
print('fcc')
调用foo(),结果为:
foo called Fri Mar ::
fcc
可以看到,在不修改foo函数的前提下,增加了foo函数被调用时的执行过程
@w内部执行的过程
1、执行w函数,并将@w下的函数作为w函数的参数:
@w等价于w(foo)
返回w的内部函数inner(),
即:
def inner():
print("%s called %s" % (fcc.__name__,ctime())) fcc()
2、执行w函数后的返回值
将执⾏完的w1函数返回值 赋值 给@w1下⾯的函数的函数名f1 即将w1
的返回值再重新赋值给 f1
新fcc = def inner():
print("%s called %s" % (fcc.__name__,ctime()))
fcc()
这样,执⾏ fcc 函数时,就会执⾏ 新fcc 函数,在新fcc
函数内部先执⾏装饰器的内容,再执⾏原来的fcc函数,然后将原来fcc函数的返回
值返回给了调用者
装饰器的作用:
1. 引⼊⽇志
2. 函数执⾏时间统计
3. 执⾏函数前预备处理
4. 执⾏函数后清理功能
5. 权限校验等场景
6. 缓存
最新文章
- App Store最新审核标准,中文版
- 单向关系中的JoinColumn
- 小结:ac自动机
- http://blog.csdn.net/qiutongyeluo/article/details/52468081
- C# Listview 第一列不能居中
- iOS中-Qutarz2D详解及使用
- 你想不到的压缩方法:将javascript文件压缩成PNG图像存储
- python打包成exe
- 解决项目打包过程检出项目出现 svn:e15500错误
- Eclipse中javascript文件 clg 变为console.log();
- 用python做小说网站
- 为django项目配置celery的后台启动
- shell脚本中给字符串添加颜色
- python的变量和简单的数据类型
- Python爬取网易云歌单
- 过三关 Java冒泡排序选择排序插入排序小练习
- [CNBETA]Intel CPU底层漏洞事件完全详解:全球手机/电脑无一幸免[转帖]
- 2017-2018-2 20165215 实验二 Java面向对象程序设计
- 多线程数据库查询(ADO)
- android studio Gradle Build速度加快方法