Python之装饰器
来源:互联网 发布:牛根生 知乎 编辑:程序博客网 时间:2024/04/27 13:53
一、简介
当我们想要增强某个函数的功能的时候,但又不希望修改函数的内容,这种情况就称之为装饰器decorator。
二、基础:
print(f())def now(): return ('2015-06')f = nowprint(f())
结果:
2015-06
1.函数也是一个对象,而且函数对象可以赋值给变量,同样我们通过调用变量也能调用该函数
def log(func):#1.可以接收一个变量或者函数,如下面的now函数 def warpper(*args,**kw): #3.定义warpper,关键字参数,接收任意个参数 print('call %s():' %func.__name__) #4.打印日志:返回func变量的函数名字:now return func(*args,**kw) #5.返回func指向的函数now。 return warpper #2.log函数返回了warpper函数。而warpper带有参数和变量即称为闭包@log#now = log(now)#接收now为函数返回新now# 新的now 是指能打印日志的的就的now即原始输出日期的def now(): print('2017-04-25')print(log(now))#可以看出log函数的确返回了warpper函数print(now())
结果:
<function log.<locals>.warpper at 0x000001F07541CEA0>call now():2017-04-25None#为什么会有个none
def log(text): #2传入now 函数 def docorator(func): #4调用返回的函数docortor,参数是now函数 def wrapper(*args,**kw):#6调用返回函数wrapper,参数是('execute')(now) print('%s %s():' % (text,func.__name__)) #打印execute now(): return func(*args,**kw)#返回旧now函数 return wrapper #5返回wrapper return docorator #3返回docoratoe,@log('execute')#1now = log('execute')(now)三层嵌套def now(): print('2017-03-25')print(now.__name__)#print(log(now))print(now())
functools.warps
import functoolsdef log(func): @functools.wraps(func) def wrapper(*args, **kw): print('call %s():' % func.__name__) return func(*args, **kw) return wrapper@logdef now(): print('2017-03-25')print(now())print(now.__name__)
0 0
- python之装饰器
- Python之装饰器
- Python 之 decorator装饰器
- Python 之 decorator 装饰器
- python学习之装饰器
- Python学习之装饰器
- python系列之 - 装饰器
- python之装饰器模式
- Python之装饰器函数
- python之装饰器decorator
- Python进阶之装饰器
- Python进阶之装饰器
- Python进阶之装饰器
- Python装饰器之 property()
- python学习之装饰器
- Python之装饰器学习
- Python之装饰器入门
- Python-开发之路-装饰器&多层装饰器简介
- Python库Windows版本超全下载网址推荐
- 寻找多数元素
- 设计一个栈,除了pop push 还支持Min,时间复杂度都为o(1);
- C语言综合实践main()函数匹配,括号换行,加注释
- JAVA设计模式之单例模式
- Python之装饰器
- ubuntu 修改IP ifdown: interface eth0 not configured
- 【Axure】--repeater(中继器)实现行上移下移
- 字符串函数整理
- 连续特征离散化的方法
- Android工具:Hierarchy Viewer
- 关于移动段设备物理像素和css像素的一点研究
- 修改Jenkins用户的密码
- 阅读笔记:Single Shot Multibox Detector(SSD)