标签:不能 input func res 工具 原则 art login ==
‘ ’ ‘
1. 什么是装饰器
器=>工具
装饰=>指的是为被装饰对象添加新功能
装饰器本身可以是任意可调用的对象=>函数
目标:写一个函数来为另外一个函数添加新功能
2,为何要用装饰器
开放封闭原则: 软件一旦上线就应该对修改封闭:
1. 不能修改功能的原代码
2. 也不能修改功能的调用方式
对扩展开放:
可以为原有的功能添加新的功能
装饰器就是要在不修改功能原代码以及调用方式的前提下为原功能
3.如何用装饰器
’ ‘ ’
import time
des indesx():
print(‘welcome to index page‘)
time.sleep(3)
dwf wrapper(func):
# func=最原始那个index的内存地址()
stop=tine.tine()
print(‘run time is %s‘ %(stop-start))
rturn wrapper
index=outter (index) # index=outter(最原始那个indwx的内存的) #index=wrapper函数的内地址
indwx() # wraper()
‘ ‘ ‘
# @ 装饰器的名字:要在被装饰对象正上方单独一行写上
import time
def timmer (func): # func=最原始那个home的地址
def wrapper (*args,**kwards):
stop=time,time()
res=func(*ars,**kwargs)
stop=tme,time()
print(‘run time is %s‘ %(stop-start))
return res
wrapper.--doc--=func.__doc__
wrapper__ name__=func._name__
@timmer #index=timmer(index) ## index=timmer(最原始那个index的内存地址 #index=wrapper的函数内地址
def index():
"""这是index功能“”“
print(‘welcome to index pade‘)
time.sleep(3)
rturn 123
@ timmer # home=timmer(home) # index=timmer(最原始的那个home的内存地址) # index=wrapper函数内地址
def home(name):
"""这是home功能“”‘
print (‘welcome %s to home page‘ %name)
time.sleep(1)
# home(‘egon‘) # wrapper(‘egon‘)
# index() # wrapper()
# print(help(index))
# print (help(home))
# print (index.--doc--)
‘‘‘
from functools import wraps
import time
def timmer(func): # func=最原始那个home的内地址
@ wraps(func)
dwf t wrapper (*arg,**kwargs):
star=time,time()
res=func(*arjs,**kwards)
stop=time,time()
print(‘run time is %s‘ %(stop-tart))
return wrapper
@ timmer
def index():
"""这是index功能“”“
print(‘welcome to index page‘)
time,slep(1)
print(help(index))
print(index,__name--)
# 无惨装饰器的模板
# def outter (unc):
# def wrapper(*args;**keargs)"
res=func(*args,**kwargs)
return res
return wrapper
import time
user- info={‘current-user‘-none}
def auth(func):
def wrapper(*args,**kwargs):
if user- info[‘current-user‘] is not noe:
res =func(*args,**kwargs)
return res
inp - user=input(‘username>>>:‘).strip()
inp - pwd=input(‘pasword>>>:’)。strip()
if inp-usr‘==‘egon‘an ind-pwd==‘123‘:
# 记录登录状态
user-info[‘current-user‘]=inp-user
print(‘login uccessful‘)
res=furn res
else:
print(‘user or password error‘)
return wrapper
@ auth
def index():
"""这是home功能“”“
print(‘welcome to index page‘)
time,sleep(2)
return123
@ auth
def home(name):;
"""这是home功能“”“
print(‘welcome %e to home page‘ %name)
time, sleep(1)
index()
home(‘egon‘)
# 有惨装饰器的名字:要在被装饰对象正上方单独一行写上
import time
def timmer (func): #func=最原始那个home的内地址
# 无参装饰器的模板
# def outter(func):
# def wrapper (*ars,**kwargs):
res=unc(*args,**kwargs)
return wrapper
import time
user-info={‘current-user‘ ;none}
def anfth(func):
def wrappry(*args;**kwargs):
if user-info[*current-user‘] s not none:
res=func(*args,**kwargs)
return res
inp-user=input(‘usename>>>;‘).stip()
inp-pwd=input(‘password.>>>:‘).strip()
if inp - user == ‘egon‘ an inp-pwd==‘123‘:
# 记录状态
user-info[‘current-user‘]=inp-user
print(‘login ssuccessful‘)
res=func(*args,**kwargs)
return res
else:
print(‘user or password error‘)
return wrapper
@ auth
def index():
"""这是indwx 功能“”“
print(‘welcome to indwx page‘)
time,sleep(2)
return 123
@ auth
def home(name):
"""这是home功能“”“
print(‘welcome %s to index page‘)
time,sleep(1)
# index()
3 home (‘egon‘)
#
有参装饰器
dwf outter2(xxx,yyy):
def outter(func):
dwf wrapper(*args,**kwargs):
res=func(*args,**kwargs)
print(xxx)
print(yyy)
return rs
return wrapper
return outter
import time
user-info=[‘currentuser‘:none]
dwf auth2(engine=‘file‘):
def auth (func):
def auth(func):
def wrapper (*args;**kwargs)"
if user-info[‘current-user‘] is not none:
标签:不能 input func res 工具 原则 art login ==
原文地址:https://www.cnblogs.com/hui2002/p/9715545.html