您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
一、理论知识:
定义:装饰器本身是函数,就是为了为其他函数添加附加功能。
原则:
1、不能修改被修饰函数的源代码
2、不能修改被修饰函数的调用方式
装饰器知识必备:
1、函数即“变量”
2、高阶函数
a:把一个函数名作为实参传给另外一个函数
b:返回值中包含函数值
3、嵌套函数
高阶函数+嵌套函数=》装饰器
二、低潮版
import time def timmer(func): def bar(*args,**kwargs):#*args,**kwargs:表示非固定参数 start_time=time.time() func(*args,**kwargs) stop_time=time.time() print ('the func run time %s'%(stop_time-start_time)) return bar#只是返回了内存地址,并没有运行bar()函数 @timmer#调用装饰器timmer。相当于:test1=timmer(test1) def test1():#由于返回bar()的地址,所以test1=timmer(test1)=bar time.sleep(3) print ('in the test1') @timmer def test2(name): print ('in the test2',name) #test1 = timmer(test1)#把返回的bar()函数内存地址赋值给test1 test1() test2(2)
三、高潮版
当被修饰函数中出现返回值(return 'from home')
user,passwd= 'peter','123qwe' def auth(auth_type): print ('auth_type:',auth_type) def outer(func): def warpper(*args,**kwargs): print ('warpper:',*args,**kwargs) username = input ('Username:').strip() password = input ('Password:').strip() if (user==username and passwd ==password): print ('\033[32;1mUser has passed authentication\033[0m') te=func(*args,**kwargs)#相当于执行home(*args,**kwargs) print ('----------') return te else: exit('\033[31;1mInvalid username or password\033[0m') return warpper return outer def index(): print ('welcome to index page') @auth(auth_type='local') def home(name): print ('welcome to home page',name ) return 'from home' @auth(auth_type='lodap') def bbs(): print ('welcome to bbs page') index() print (home(2)) bbs()
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。