2018年9月28日函数part4多个装饰器和迭代器
Posted yehuihuihui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018年9月28日函数part4多个装饰器和迭代器相关的知识,希望对你有一定的参考价值。
一、多个装饰器
1、当一个被装饰的对象同时叠加多个装饰器时规则:
(1) 装饰器的加载顺序是:自下而上
(2)装饰器内wrapper函数的执行顺序是:自上而下
import time def timmer(func): #func=wrapper2的内存地址 def wrapper1(*args, **kwargs): print(‘===================================>wrapper1运行了‘) start=time.time() res = func(*args, **kwargs) #===========================>跳到wrapper2去执行了, stop=time.time() print(‘run time is %s‘ %(stop - start)) return res return wrapper1 def auth(engine=‘file‘): def xxx(func): # func=最原始那个index的内存地址 def wrapper2(*args, **kwargs): print(‘===================================>wrapper2运行了‘) name=input(‘username>>>: ‘).strip() pwd=input(‘password>>>: ‘).strip() if engine == ‘file‘: print(‘基于文件的认证‘) if name == ‘egon‘ and pwd == ‘123‘: print(‘login successfull‘) res = func(*args, **kwargs) return res elif engine == ‘mysql‘: print(‘基于mysql的认证‘) elif engine == ‘ldap‘: print(‘基于ldap的认证‘) else: print(‘错误的认证源‘) return wrapper2 return xxx @timmer # index=timmer(wrapper2的内存地址) #index=wrapper1的内存地址 @auth(engine=‘file‘) #@xxx #index=xxx(最原始那个index的内存地址) #index=wrapper2的内存地址 def index(): print(‘welcome to index page‘) time.sleep(2) index() #wrapper1的内存地址()
以上是关于2018年9月28日函数part4多个装饰器和迭代器的主要内容,如果未能解决你的问题,请参考以下文章