码迷,mamicode.com
首页 > 其他好文 > 详细

2018年9月28日函数part4多个装饰器和迭代器

时间:2018-10-07 22:03:31      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:time   一个   ret   %s   code   wrapper   加载顺序   基于   对象   

一、多个装饰器

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多个装饰器和迭代器

标签:time   一个   ret   %s   code   wrapper   加载顺序   基于   对象   

原文地址:https://www.cnblogs.com/ye-hui/p/9751618.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!