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多个装饰器和迭代器的主要内容,如果未能解决你的问题,请参考以下文章

2018年4月17日笔记

2018年12月14日 函数 总结

装饰器和迭代器

2018年04月28日 Python--正则(re)

装饰器和生成器和迭代器

Python迭代器和生成器,装饰器