首页 > 其他 > 详细

有参装饰器 多个装饰器装饰一个

时间:2019-07-26 22:30:20      阅读:77      评论:0      收藏:0      [点我收藏+]

1.有参装饰器

基本版

def auth(argv):
    def wrapper(f):
        def inner(*args,**kwargs):
            f(*args,**kwargs)
        return inner
    return wrapper

示例:

login_dic = {"username": None, "flag": False}
msg = """请选择app:
QQ
微信
抖音
邮箱
"""

chose = input(msg).upper()
def auth(argv):
    def wrapper(f):
        def inner(*args,**kwargs):
            if login_dic["flag"]:
                f(*args,**kwargs)
            else:
                if argv == "QQ":
                    print("欢迎登陆QQ")
                    user = input("请输入账号:")
                    password = input("请输入密码:")
                    if user == "alex" and password == "alex123":
                        login_dic["flag"] = True
                        login_dic["username"] = user
                        f(*args,**kwargs)
                    else:
                        print("账号或者密码错误")
                elif argv == "微信":
                    print("欢迎登陆微信")
                    user = input("请输入账号:")
                    password = input("请输入密码:")
                    if user == "alex123" and password == "alex123456":
                        login_dic["flag"] = True
                        login_dic["username"] = user
                        f(*args, **kwargs)
                    else:
                        print("账号或者密码错误")
                elif argv == "抖音":
                    print("欢迎登陆抖音")
                    user = input("请输入账号:")
                    password = input("请输入密码:")
                    if user == "alex456" and password == "alex456123":
                        login_dic["flag"] = True
                        login_dic["username"] = user
                        f(*args, **kwargs)
                    else:
                        print("账号或者密码错误")
                else:
                    print("欢迎登陆邮箱")
                    user = input("请输入账号:")
                    password = input("请输入密码:")
                    if user == "alex@qq.com" and password == "alex123":
                        login_dic["flag"] = True
                        login_dic["username"] = user
                        f(*args, **kwargs)
                    else:
                        print("账号或者密码错误")
        return inner
    return wrapper

@auth(chose)
def foo():
    print("这是一个被装饰的函数")
foo()

# @auth(chose) 相等于以下两行代码的解构
# wrapper = auth(chose)
# foo = wrapper(foo)

2.多个装饰器装饰一个函数

def wrapper1(func):
    def inner1(*args,**kwargs):
        print(1)
        func(*args,**kwargs)
        print(11)
    return inner1

def wrapper2(func):
    def inner2(*args,**kwargs):
        print(2)
        func(*args,**kwargs)
        print(22)
    return inner2

def wrapper3(func):
    def inner3(*args,**kwargs):
        print(3)
        func(*args,**kwargs)
        print(33)
    return inner3

@wrapper3
@wrapper2
@wrapper1
def foo():
    print("这是一个被装饰的函数")

foo()

#3
2
1
这是一个被装饰的函数
11
22
33

有参装饰器 多个装饰器装饰一个

原文:https://www.cnblogs.com/beichen123/p/11253054.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!