装饰器
def test():
print ('>>>text>>>')
def alex(t):
print (t)
test()
print ('alex>>>>>alex')
a=test
a()
print ('华丽的分割线')
alex(a)
import time
def decorate(func):
a=100
print ('wrapper 打印测试')
def wrapper():
func()
print ('刷漆')
print ('铺地板')
print ('正在校验')
print ('wrapper 加载完成')
time.sleep(2)
print ('校验完成')
func()
return wrapper
@decorate
def hourse():
print ('---f1---')
hourse()
具体解释如下:
1.在定义装饰器 decorate 时,它接收一个函数 func 作为参数,并定义了一个内部函数 wrapper。
2。当执行 @decorate 表达式时,decorate 被调用,并且被装饰的函数 hourse 作为参数传递给 decorate。此时,装饰器 decorate 的逻辑开始执行。
3.在装饰器内部,先执行了一些打印语句和校验逻辑。
4.然后,执行了 func(),这里的 func 是在装饰器外部定义的 hourse 函数。
5.接着,在 wrapper 函数中执行了一些额外的操作,包括打印 "刷漆" 和 "铺地板"。
6.最后,装饰器返回了内部的 wrapper 函数。
print (hourse)
hourse()
def zhuangxiu1(func):
print ('>'*20+'1start')
def wrapper(*args,**kwargs):
func()
print ('喷漆')
print ('>'*20+'1end')
return wrapper
def zhuangxiu2(func):
print ('>'*20+'2start')
def wrapper(*args,**kwargs):
func()
print ('装门')
print ('>'*20+'2end')
return wrapper
@zhuangxiu2
@zhuangxiu1
def hourse():
print ('我是毛坯房')
hourse()
def zhuangxiu1(func):
def wrapper(*args,**kwargs):
func(*args,**kwargs)
print ('铺砖')
return wrapper
@zhuangxiu1
def hourse(time):
print ('{}我是毛坯房' .format(time))
hourse('2020-6-12')
import time
islogin=False
def login():
user=input('please input user:')
password=input('please input pass')
if user=='admin' and password=='123456':
return True
else:
return False
def login_required(func):
def wrapper(*args,**kwargs):
global islogin
if islogin:
func(*args,**kwargs)
else:
islogin=login()
print ('result',islogin)
return wrapper
@login_required
def pay(money):
print ('正在付款,付款金额是:{}' .format(money))
print ('付款中...')
time.sleep(2)
print ('付款完成')
pay(1000)
pay(8000)
应用场景
装饰器主要在以下情况下会被使用:
函数扩展:装饰器可以用于扩展函数的功能。通过在函数定义之前使用装饰器,可以在不修改原始函数代码的情况下添加额外的行为或功能。这样可以提高代码的可重用性和可维护性。
认证和授权:装饰器可以用于验证用户身份和权限控制。通过在需要进行身份验证或授权的函数上应用装饰器,可以确保只有经过验证的用户才能执行特定的操作。
缓存:装饰器可以用于实现函数的结果缓存。通过在函数执行前检查缓存并返回缓存结果,可以避免重复计算,提高程序的性能。
日志记录:装饰器可以用于记录函数的调用信息和执行日志。通过在函数执行前后添加日志记录的逻辑,可以方便地追踪函数的调用过程和输出结果,用于调试和分析。
输入验证和数据转换:装饰器可以用于验证函数的输入参数,并进行必要的数据转换或格式化。通过在函数执行前进行输入验证,可以确保函数接收到正确的参数,并在需要时对参数进行预处理。
性能分析:装饰器可以用于测量函数的执行时间和性能指标。通过在函数执行前后记录时间戳,并计算执行时间,可以评估函数的性能,并进行性能优化。
这些只是装饰器的一些常见应用场景,实际上,装饰器非常灵活,可以根据需求进行扩展和定制,以适应各种不同的编程需求。在Python等编程语言中,装饰器被广泛应用于实现各种功能和框架。它们提供了一种优雅而简洁的方式来修改和扩展代码的行为,同时保持代码的可读性和可维护性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!