python装饰器代码的示例分析
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍python装饰器代码的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.装饰器通用模型def wrapper(fn): def inner(*a
千家信息网最后更新 2025年11月07日python装饰器代码的示例分析
这篇文章主要介绍python装饰器代码的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
1.装饰器通用模型
def wrapper(fn): def inner(*args, **kwargs): ret = fn(*args, **kwargs) return ret return inner
装饰器几个关键点:
1.函数可以当参数传递
2.函数可以作为返回值进行返回
3.函数名称可以当成变量一样进行赋值操作
装饰器本质上是个闭包,在不改变原有函数调用的情况下,给函数增加新的功能
举个例子:
def admin(game): def inner(*args, **kwargs): # inner添加了参数,args 一定是个元组 kwargs 一定是字典 print('打开Wg') result = game(*args, **kwargs) # * ** 表示把args元组和kwargs打散成位置参数,关键字参数传递进去 print('关闭Wg') return result return inner@admindef play_dnf(username, password): print(f'开始玩DNF,账号:{username},密码:{password}') print('刀斩肉身,心斩灵魂') return '掉落:戮蛊的哀鸣炮'@admindef play_wow(race, occupation, server_name, camp): print(f'开始玩魔兽世界,种族:{race},职业:{occupation},服务器:{server_name},阵营:{camp}') print('为了辛多雷的荣耀') return '掉落:灰烬使者'if __name__ == '__main__': ret1 = play_dnf('大马猴', '888888') print(ret1) ret2 = play_wow('血精灵', '圣骑士', '回音山', '部落') print(ret2)这代码还是很好懂的,我就不解释了,然后是执行结果如下:
python demo.py
打开Wg
开始玩DNF,账号:大马猴,密码:888888
刀斩肉身,心斩灵魂
关闭Wg
掉落:戮蛊的哀鸣炮
打开Wg
开始玩魔兽世界,种族:血精灵,职业:圣骑士,服务器:回音山,阵营:部落
为了辛多雷的荣耀
关闭Wg
掉落:灰烬使者Process finished with exit code 0
2.多个装饰器装饰的函数执行
一个函数被多个装饰器装饰,又将如何执行呢?
def wrapper1(fn): def inner(*args, **kwargs): print('这是w1进入') ret = fn(*args, **kwargs) print('这是w1出去') return ret return innerdef wrapper2(fn): def inner(*args, **kwargs): print('这是w2进入') ret = fn(*args, **kwargs) print('这是w2出去') return ret return inner@wrapper1@wrapper2def target(): print('我是目标')if __name__ == '__main__': target()直接给出执行顺序:
一个函数被多个装饰器装饰的执行顺序
# w1 w2 target w2 w1
3.带参数的装饰器
装饰器的语法允许我们在调用时,提供其它参数,比如@decorator(a)。这样,就为装饰器的编写和使用提供了更大的灵活性。
(在上面又套了一层函数)
比如,我们可以在装饰器中指定日志的等级,因为不同业务函数可能需要的日志级别是不一样的。
def use_logging(level): def decorator(func): def wrapper(*args, **kwargs): if level == "warn": logging.warn("%s is running" % func.__name__) elif level == "info": logging.info("%s is running" % func.__name__) return func(*args) return wrapper return decorator@use_logging(level="warn")def foo(name='foo'): print("i am %s" % name)foo()4.类装饰器
没错,装饰器不仅可以是函数,还可以是类,相比函数装饰器,类装饰器具有灵活度大、高内聚、封装性等优点。使用类装饰器主要依靠类的__call__方法,当使用 @ 形式将装饰器附加到函数上时,就会调用此方法。
class Foo(object): def __init__(self, func): self._func = func def __call__(self): print ('class decorator runing') self._func() print ('class decorator ending')@Foodef bar(): print ('bar')bar()以上是"python装饰器代码的示例分析"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
函数
参数
这是
代码
多个
示例
分析
世界
使者
关键
内容
回音
密码
日志
服务器
灰烬
灵魂
种族
篇文章
精灵
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网站域名服务器哪个好
三国杀传奇所有服务器的名字
如何把管家婆数据库放在云端
app软件开发一个多少钱
信息中心网络安全宣传
软件开发面试穿什么
学校网络安全课堂总结报告
服务器与电脑的区别单项选择题
网络安全专题报告ppt模板
查看密钥管理服务器
大王卡 免流服务器
明确网络安全工作责任人
超激斗梦境服务器情况
防震减灾网络安全手抄报
如何查看所有的数据库
数据库可用性组的ip配置
端游我的世界服务器在哪找
网络安全审查对外国通讯的影响
在交换机上做数据库镜像
数据库差插件
吕梁软件开发均价
学软件开发得多少钱
在软件建模过程中软件开发者
成都蜂巢运维软件开发
实现音乐c调的实验数据库
超市管理系统怎么设计数据库
王者荣耀可以切换服务器
职业认证数据库
福建网络安全培训服务机构
常州电话软件开发销售价格