复习:装饰器
装饰器
装饰器就是闭包函数的一种应用场景
为什么要用装饰器
开放封闭原则:对修改封闭,对扩展开放
什么是装饰器
装饰器-他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象。
强调-装饰器的原则:1、不修改被装饰对象的源代码 2、不修改被装饰对象的调用方式
装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新的功能
装饰器的使用
无参装饰器
import time
def timmer(func):
def wrapper(*args,**kwargs):
start_time=time.time()
res=func(*args,**kwargs)
stop_time=time.time()
print('run time is %s' %(stop_time-start_time))
return res
return wrapper
@timmer
def foo():
time.sleep(3)
print('from foo')
foo()
有参装饰器
def auth(driver='file'):
def auth2(func):
def wrapper(*args,**kwargs):
name=input("user: ")
passwd=input('passwd: ')
if driver == 'file':
if name=='allen' and passwd=='123':
print('登陆成功')
res=func(*args,**kwargs)
return res
else:
print('登陆失败')
elif driver=='ldap':
print('ldap')
return wrapper
return auth2
@auth(driver='file')
def foo(name):
print(name)
foo('allen')
装饰器语法
#被装饰函数的正上方,单独一行
@deco1
@deco2
@deco3
def foo():
pass
foo=deco1(deco2(deco3(foo)))
装饰器补充:wraps
from functools import wraps
def deco(func):
@wraps(func) #加在最内层函数正上方
def wrapper(*args,**kwargs):
return func(*args,**kwargs)
return wrapper
@deco
def index():
'''哈哈哈哈'''
print('from index')
print(index.__doc__)
作者:墨颜丶—— 在南方的北方少年郎
签名:当你的才华还撑不起你的野心的时候,你就应该静下心来学习
出处:http://www.cnblogs.com/moyand/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号