无参装饰器以及装饰器语法糖

1. 什么是装饰器
装饰器指的是为被装饰对象添加新功能的工具
装饰器本身可以是任意可调用对象
被装饰对象本身也可以是任意可调用对象


2. 为何要用装饰器
开放封闭原则:对修改封闭,对扩展开发

装饰器的实现原则:
1. 不能修改被装饰对象的源代码
2. 不能修改被装饰对象的调用方式

装饰器的目的:
就是在遵循原则1和2的前提为被装饰对象添加新功能

3. 如何用
# part1
import time

def index():
time.sleep(1)
print('welcome to index page')

def wrapper():
start=time.time()
func()
stop=time.time()
print('run time is %s' %(stop -start))

wrapper()


part2
import time

def outter(func):
# func=最原始那个index的内存地址
def wrapper(*args,**kwargs):
start=time.time()
res=func(*args,**kwargs) #最原始那个index的内存地址()
stop=time.time()
print('run time is %s' %(stop -start))
return res
return wrapper

@outter #index=outter(index) #inex=outter(最原始那个index的内存地址) # index=wrapper的内存地址
def index():
time.sleep(1)
print('welcome to index page')
return 1234

@outter #home=outter(home)    @加上装饰器变量名就是语法糖,如 @outter
def home(name):
time.sleep(1)
print('welcome %s to home page' %name)


res=index() #wrapper的内存地址()
# print('返回值',res)

home('egon')


小练习
import time

def auth(func):
# func=index
def wrapper(*args,**kwargs):
name=input('name>>>: ').strip()
pwd=input('pwd>>>: ').strip()
if name == 'egon' and pwd == '123':
print('login successfull')
res=func(*args,**kwargs)
return res
else:
print('user or pwd error')
return wrapper


@auth
def index():
time.sleep(1)
print('welcome to index page')
return 1234

index()

无参装饰器模板
def outter(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
return res
return wrapper

转载于:https://www.cnblogs.com/huangchaonan/p/10038858.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值