装饰器(无参,有参装饰器,语法糖)
Posted huangchaonan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器(无参,有参装饰器,语法糖)相关的知识,希望对你有一定的参考价值。
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
以上是关于装饰器(无参,有参装饰器,语法糖)的主要内容,如果未能解决你的问题,请参考以下文章