函数闭包带参数装饰器

Posted zhangsenzhen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数闭包带参数装饰器相关的知识,希望对你有一定的参考价值。

import time
users_dic = [{name:zsz,passwd:123},
            {name:alex,passwd:123},
            {name:lhf,passwd:123}]
current_dic = {"username":None,"Login":False}
def auth(auth_type=filedb):
    def auth_func(func):
        def wrapper(*args,**kwargs):
            print("认证方式是:",auth_type)
            if auth_type == filedb:
                if current_dic["username"] and current_dic["Login"]:
                    res = func(*args,**kwargs)
                    return res
                username = input("用户名:").strip()
                passwd = input("密码:").strip()
                for user_dic in users_dic:
                    if username == user_dic[name] and passwd == user_dic[passwd]:
                        current_dic["username"] = username
                        current_dic["Login"] = True
                        res = func(*args, **kwargs)
                        return res
                else:
                    print("用户名或者密码错误")
            elif auth_type == ldap:
                start_time = time.time()
                res = func(*args,**kwargs)
                stop_time = time.time()
                print("函数运行时间为%s秒" %(stop_time-start_time))
                return res
        return wrapper
    return auth_func

@auth(auth_type=filedb) #home = auth(auth_type=‘field‘) --> home = auth_func(home) --> home = wrapper
def home(name):
    print("欢迎%s回家" %name)
@auth(auth_type=ldap)
def shopping():
    time.sleep(2)
    print("购物车里有:牛奶,面包,大米")
home(zsz)
shopping()

输出结果为:

认证方式是: filedb
用户名:zsz
密码:123
欢迎zsz回家
认证方式是: ldap
购物车里有:牛奶,面包,大米
函数运行时间为2.0004611015319824秒







以上是关于函数闭包带参数装饰器的主要内容,如果未能解决你的问题,请参考以下文章

python基础-装饰器和偏函数

python装饰器详解

闭包函数,装饰器

python闭包与装饰器

Python闭包和装饰器

闭包 与 装饰器