装饰器的作用是什么呢? 简单的理解就是:装饰原有的函数(增强函数的功能)。什么意思呢?比如有一个函数func(a, b),它的功能是求a,b的和,我现在有一个需求,就是想对函数功能再装饰下,求完和后再打印时间,但是不能在func函数内部实现,这时候就需要装饰器函数了,比如func = decorate(func)函数,将func函数作为参数传递给decorate函数,由decorate来丰富func函数,丰富完成后再返回给func,此时func的功能就丰富了。
不使用装饰器
import time def add(x, y, fun): def wrap(): sum = x + y print('结果是', sum) fun() return sum return wrap def logs(): print('现在时间是', time.time()) f = add(1, 3, logs) f() 结果 结果是 4 现在时间是 1584548130.0867918
明显看出来比较麻烦,我需要把打印时间的函数传到另外一个函数中,然后在调用,才能实现
#fun代表的是被装饰的函数 def logs(fun): #wrap函数用来接收参数 def wrap(*arg): print('现在时间是', time.time()) fun(*arg) return wrap @logs def add(x, y): print('{}+{}={}'.format(x, y, x+y)) return x+y add(1, 3)
关键字参数传递
import time # fun代表被装饰的函数 def decorator(fun): # 使用可变参数接收被传递的参赛,*arg代表接收所有的参数,*obj代表接收关键字参赛 def wrap(*arg, **obj): print(time.time()) fun(*arg, **obj) return wrap @decorator def f1(name): print('f1方法传递的参数是', name) @decorator def f2(name1, name2, **obj): print('f2方法传递的参数是', name1, name2, obj) f1('张三') f2('小米', '小明', id=5, a='aaaa') 结果是: 1584550995.5089002 f1方法传递的参数是 张三 1584550995.5094006 f2方法传递的参数是 小米 小明 {'id': 5, 'a': 'aaaa'}
发表评论
侧栏公告
寄语
譬如朝露博客是一个分享前端知识的网站,联系方式11523518。
热评文章
标签列表
热门文章
友情链接