装饰器
1、装饰器本质上是函数,为其它函数添加附加功能
2、原则上:1、不能修改被装饰的函数的源代码 2、不能修改被装饰的函数的调用方式
3、实现装饰器的知识储备:1、函数即“变量” 2、高阶函数 3、嵌套函数 所以,高阶函数+嵌套函数----》装饰器
4、解释函数即变量
5、装饰器自定义例子(装饰器不带参数)

import time def timer(func): def deco(*args, **kwargs): start_time = time.time() res = func(*args, **kwargs) stop_time = time.time() print('此程序运行了%s秒' % (stop_time - start_time)) return res return deco @timer # 相当于func = timer(func) def func(): time.sleep(3) # func = timer(func) # func() func()
6、使用装饰器,可在自定义函数前加@decortor_name,相当于fun_name=decortor_name(fun_name),此处的目的就是为了不改变函数的调用方式。
7、装饰器带参数例子(终极版)

def auth(auth_type): def outerwrapper(func): def wrapper(*args, **kwargs): if auth_type == 'local': msg = '本地验证' elif auth_type == 'ldap': msg = '远程验证' print(msg) res = func(*args, **kwargs) return res return wrapper return outerwrapper @auth(auth_type='local') # 相当于home=wrapper def home(): print('In the home page') @auth(auth_type='ldap') # 相当于bbs=wrapper def bbs(): print('In the bbs page') home() bbs()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」