Python—装饰器
2016-01-03 17:19
537 查看
装饰器
1.普通函数
2.在函数前后添加功能
3.使用装饰器
4.装饰带参数的函数
5.装饰动态参数的函数
6.装饰含有返回值的函数
7.装饰器实现登录验证简单原理
View Code
9.装饰器加参数
1.普通函数
#简单的函数和调用 def a1(): print("i am zhangsan") def a2(): print("i am lisi") a1() a2()
2.在函数前后添加功能
def inner(func): print("添加1") func() print("添加2") return func def a1(): print("i am zhangsan") def a2(): print("i am zhangsan") a1=inner(a1) a1() a2=inner(a2) a2()
3.使用装饰器
def mywork(func): def inner(): print("添加1") func() print("添加2") return inner @mywork # @mywork就等于a1=mywork(a1) def a1(): print("i am zhangsan") a1() #执行时@mywork会把他下面的函数当成mywork函数的参数既mywork(a1),然后在函数inner里执行,inner内func()=a1()
4.装饰带参数的函数
def mywork(func): def inner(arg): print("添加1") func(arg) print("添加2") return inner @mywork def a1(arg): print 'i am zhangsan',arg a1("参数1")
5.装饰动态参数的函数
#合并无参,有参,多参 可以装饰含有N个参数的函数 def mywork(func): def inner(*args,**kwargs): print("添加1") func(*args,**kwargs) print("添加2") return inner @mywork def a1(): print 'i am zhangsan' @mywork def a2(arg): print 'i am zhangsan',arg @mywork def a3(arg1,arg2): print 'i am zhangsan',arg1,arg2 a1() a2("参数1") a3("参数1","参数2")
6.装饰含有返回值的函数
#装饰含有返回值的函数 def mywork(func): def inner(*args,**kwargs): print("添加1") aa=func(*args,**kwargs) print("添加2") return aa return inner @mywork def a3(arg1,arg2): print 'i am zhangsan',arg1,arg2 li=[1,2,3,4,5,6] return li #返回一个列表 list=a3("参数1","参数2") #list等于inner的返回值 print(list) #li列表是a3的返回值,所以给在inner函数里执行的func()赋给aa,在通过inner的返回值就能拿到列表
7.装饰器实现登录验证简单原理
def newwork1(func): def inner(): print("newwork1前") func() print("newwork1后") return inner def newwork2(func): def inner(): print("newwork2前") func() print("newwork2后") return inner @newwork2 @newwork1 def f1(): print 'i am zhangsan' f1() ''' 输出结果: newwork1前 newwork2前 i am zhangsan newwork2后 newwork1后 '''
View Code
9.装饰器加参数
#3层装饰器 def Filter(a1,a2): def outer(func): def wrapper(request,kargs): print(a1) result=func(request,kargs) print(a2) return result return wrapper return outer aa=11 bb=22 @Filter(aa,bb) def Index(request,kargs): print request,kargs Index("zhangsan","lisi") #@Filter(aa,bb)会先执行Filter(aa,bb)函数,获取到返回值outer后拼接成@outer,之后就变成普通的装饰器了 #wrapper函数内可以使用a1,a2,request,kargs 4个参数
相关文章推荐
- python--字典
- 树莓派高级GPIO库,wiringpi2 for python使用笔记(三)GPIO操作
- Python实现简单的文件传输与MySQL备份的脚本分享
- 零基础入门学习Python(26):生成器
- urllib & urllib2
- Python与R的区别与联系
- python的github3模块详解
- Python标准库01 正则表达式(re包)
- Python List Comprehensions
- 笨方法学Python(31-35)
- 用python简单处理图片(4):图像中的像素访问
- python 出现OSError: [Errno 8] Exec format error的原因
- 【python】Logistics模型预测银行贷款违约
- 树莓派高级GPIO库,wiringpi2 for python使用笔记(二)高精度计时、延时函数
- 【python学习笔记】模块导入的搜索路径顺序是什么?
- letcode之Recover Binary Search Tree
- 一个可以用于在百科搜索大量关键词的python爬虫
- 用python简单处理图片(2):图像通道\几何变换\裁剪
- 树莓派高级GPIO库,wiringpi2 for python使用笔记(一)安装
- 笨方法学Python(26-30)