装饰器

本文详细介绍了Python中装饰器的概念及其实现原理,并通过实例展示了如何使用装饰器为已有函数添加新功能,同时探讨了装饰器与可变长参数的结合使用及带参数装饰器的应用。

装饰器:
定义一个系统的版本,在做版本升级时 会用到装饰器
努力做到既不修改源代码 还可以增加新功能

修改代码的一个原则就是开放封闭原则
不能修改被装饰对象(函数)的源代码
不能修改修饰对象的调用方式,且能够达到增加功能的效果

给'花瓶'装饰一下
def vase():
print('插花')
vase()

增加一个观赏功能
def vase():
print('插花')
print('观赏')
wrap(vase)
开放不封闭
def fn():
vase()
print('观赏')
vase = fn():
vase()
开放且封闭 但是程序是个死循环
def vase():
print('插花')
tag=vase
def fn():
tag()
print('观赏')
vase = fn
vase()
这就是装饰器的雏形,我们对其进一步优化
def vase()
print('插花')
def wrap(tag):
def inner():
tag()
print('观赏')
return inner
vase=warp(vase)
vase()


语法糖

def wrap(fn)
def inner():
fn()
print('观赏')
return inner
@wrap
def vase()
print('插花')
vase()


一个函数可以被任意一个相关装饰器装饰,也可以被任意几个装饰器装饰
装饰的顺序会影响新增功德执行顺序

 

装饰器和可变长参数的结合
def wrap(fn):
def inner(*args, **kwargs):
print(args)
print(kwargs)
result = fn(*args, **kwargs)
print('新增功能')
return result

return inner


@wrap
def func(a, b, c, *, x, y, z):
print(a, b, c, x, y, z)
print('原有功能')


func(1, 2, 3, x=10, y=20, z=30)

有参装饰器的一个案例 在装饰器内带参数
def auth(driver='file'):
def auth2(func):
def wrapper(*args,**kwargs):
name = input('usr:')
pwd = input('password:')

if driver == 'file':
if name=='egon'and pwd == '123':
print('login success')
res = func(*args,**kwargs)
return res

elif driver == 'ldap':
print('ldap')
return wrapper
return auth2
@auth(driver='ldap')
def foo(name):
print(name)

foo('egon')

转载于:https://www.cnblogs.com/guanlei/p/10643175.html

乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值