装饰器
成都创新互联公司2013年开创至今,先为龙胜等服务建站,龙胜等地企业,进行企业商务咨询服务。为龙胜企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。装饰器可以叠加使用,执行是从下到上执行的
无参装饰器 @logger
1.它是一个语法糖
2.函数作为它 的形参
3.返回值也是一个函数
4.可以使用 @function 方式,简化调用
注意: 此处的装饰器的定义并不准确,只是方便理解
装饰器和高阶函数
装饰器是高阶函数,但装饰器是对传入函数功能的装饰
装饰器函数的演化过程:
"""
装饰器
一个普通的加法函数,想增强他的功能
"""
def add(x,y):
return x + y
"""增加信息输出功能"""
def add(x,y):
print("call add,x+y")# 日志输出到控制台
return x + y
"""上面的函数是完成了需求,但是有缺点
1.print语句的耦合度太高
2.加法函数属于业务功能,而输出信息的功能,属于非业务功能代码,不该放在业务函数加法中"""
"""把添加功能移出来"""
def logger(fn):
print("call add,x+y")
ret = fn(3,4)
return ret
print(logger(add))
def logger(fn,x,y):
print("call add,x+y")
ret = fn(x,y)
return ret
print(logger(add,3,4))
def logger(fn,*args,**arges):
print("call add,x+y")
ret = fn(*args,**arges)
return ret
print(logger(add,3,4))
def logger(fn):
def wrapper(*args,**arges): # 可变位置传参,可变关键字传参
print("call add,x+y")
ret = fn(*args,**arges) # 参数解构
return ret
return wrapper
print(logger(add)(4,5))
add = logger(add) # add = wrapper
ret = add(4,5) # wrapper(4,5)
装饰器 核心思想
import datetime
def logger(fn):
def wrapper(*args,**arges): # 可变位置传参,可变关键字传参
print("前面增强")
start = datetime.datetime.now()
ret = fn(*args,**arges) # 参数解构
delta = (datetime.datetime.now() - start).total_seconds()
print("so fast") if delta < 5 else print("so slow")
print("后面增强")
return ret
return wrapper
@logger # add = logger(add) => add 就是 wrapper
def add(x,y): # wrapper(4,5)
return x + y
ret = add(4,5) # wrapper(4,5) => logger(add)(4,5)
print(ret)
理解装饰器:
1.装饰器函数
2.前置功能增强
3.被增强函数
4.后置功能增强
def logger(fn): # 调用 被装饰的函数
def wrapper(*args,**kwargs): # 传入被装饰函数参数
print("before function") # 前置功能增强
ret = fn(*args,**kwargs) # 使用被装饰函数的功能
print("after function") # 后置功能增强
return ret # 返回被装饰函数的 计算结果
return wrapper # 返回 被装饰的函数
@logger # 无参装饰器
# @logger <==> add = logger(add) = wrapper # add(x,y) == wrapper(x,y)
def add(x,y): # 被装饰的函数
return x + y
add(3,4)
print(add(3,4))
#看似调用add函数,使用了装饰器@logger之后,实际上 调用的是 wraaper(*args,**kwargs)函数
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。