python装饰器简单使用
装饰器和闭包关联很大,要先明白闭包是什么
原始代码:
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. 缓存
python装饰器简单使用的更多相关文章
- python 装饰器、内部函数、闭包简单理解
python内部函数.闭包共同之处在于都是以函数作为参数传递到函数,不同之处在于返回与调用有所区别. 1.python内部函数 python内部函数示例: def test(*args): def a ...
- python装饰器的简单理解
如果你接触 Python 有一段时间了的话,想必你对 @ 符号一定不陌生了,没错 @ 符号就是装饰器的语法糖. 装饰器的使用方法很固定: 先定义一个装饰函数(帽子)(也可以用类.偏函数实现) 再定义你 ...
- Python 装饰器学习
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...
- python 装饰器修改调整函数参数
简单记录一下利用python装饰器来调整函数的方法.现在有个需求:参数line范围为1-16,要求把9-16的范围转化为1-8,即9对应1,10对应2,...,16对应8. 下面是例子: def fo ...
- python 装饰器学习(decorator)
最近看到有个装饰器的例子,没看懂, #!/usr/bin/python class decorator(object): def __init__(self,f): print "initi ...
- Python装饰器详解
python中的装饰器是一个用得非常多的东西,我们可以把一些特定的方法.通用的方法写成一个个装饰器,这就为调用这些方法提供一个非常大的便利,如此提高我们代码的可读性以及简洁性,以及可扩展性. 在学习p ...
- Python装饰器由浅入深
装饰器的功能在很多语言中都有,名字也不尽相同,其实它体现的是一种设计模式,强调的是开放封闭原则,更多的用于后期功能升级而不是编写新的代码.装饰器不光能装饰函数,也能装饰其他的对象,比如类,但通常,我们 ...
- Python装饰器与面向切面编程
今天来讨论一下装饰器.装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数 ...
- python装饰器方法
前几天向几位新同事介绍项目,被问起了@login_required的实现,我说这是django框架提供的装饰器方法,验证用户是否登录,只要这样用就行了,因为自己不熟,并没有做过多解释. 今天查看dja ...
随机推荐
- 苹果编程语言Swift简介
Swift是什么? Swift是苹果于WWDC 2014发布的编程语言,The Swift Programming Language的原话: Swift is a new programming la ...
- Win 10安装11g 客户端条件检查失败,INS-30131 无法从节点 "desktop-njm3a7m" 检索 exectask 的版本
Win 10安装11g 客户端条件检查失败,[INS-30131] 执行安装程序验证所需的初始设置失败.无法从节点 "desktop-njm3a7m" 检索 exectask 的版 ...
- 基于Python在MacOS上安装robotframework-ride
基于Python在MacOS上安装robotframework-ride https://www.jb51.net/article/153665.htm https://www.jianshu.com ...
- iOS:图片相关(18-02-12更)
1.图片显示相关 1).图片聊天背景拉伸不失真 2).捏合.双击.下拉缩放 3).Banner.相册 4).动画 2.图片操作相关 1).获取.下载图片(分享.传图片用) 2).保存UIImage到本 ...
- UML架构设计师必备神器
UML-架构设计师必备神器 做过Java开发的一定都听过UML,也都能感觉到它的重要性.由其是在网上搜索一些高级技术介绍,写的好的.阅读量高的.让初.中级程序员容易看懂的.思路清晰的文章一定有UML类 ...
- c#网络传输
接着前面简单讲的,给大家聊聊服务开发. 网络传输 先说网络传输开发,总体来说,可以看成4中模型 我们把传输过程看做网线,那么在通过传输的过程中.2边就涉及池化问题,也就是我们常见的异步传输. 在业务端 ...
- js toFixed()方法的坑
javascript中toFixed使用的是银行家舍入规则. 银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法. 简单来说就是:四舍六入五考虑,五后非零就进一,五后为零 ...
- http 协议状态码
1xx 信息类状态码 100 - Continue 初始的请求已经接受,客户应当继续发送请求的其余部分.(HTTP 1.1新) 101 - Switching Protocols 服务器将遵从客户 ...
- mysql如何把一个表直接拷贝到一个新的表
一:在新表已经建立好的情况下 1,拷贝所有的字段 insert into new_table select * from old_table 2,拷贝部分字段表 insert into new_tab ...
- Ajax与Xml
Ajax就是用javascript来实现的 主要是用来实现页面的局部刷新,比如当你在百度上回答别人的问题时候,没有登录,页面会弹出一个窗口,让你输入账号和密码,这就是利用ajax来做的,如果不是aja ...