"""
    装饰器:
        定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能
        原则:1. 不能修改被装饰的函数的源代码
              2. 不能修改被装饰的函数的调用方式


    实现装饰器知识储备:
        1. 函数即"变量"
        2. 高阶函数
            a: 把一个函数名当做实参传给另外一个函数(在不修改被装饰函数代码的情况下为其添加功能)
            b: 返回值中包含函数名
        3. 嵌套函数
        高级函数 + 嵌套函数 =》 装饰器
"""

import time


def timmer(func):
    def warpper(*args, **kwargs):
        start_time = time.time()
        func(*args, **kwargs)
        stop_time = time.time()
        print("the func run time is %s" % (stop_time - start_time))

    return warpper


@timmer
def test1():
    time.sleep(3)
    print("in the test1")


@timmer
def test2(name, age):
    time.sleep(3)
    print("in the test2", name, age)


test1()
test2('zhang', 18)

"""
    装饰器传参
"""

def auth(auth_type):
    def outer_wrapper(func):
        def wrapper(*args, **kwargs):
            if auth_type == "local":
                username = input("Username:").strip()
                password = input("Password:").strip()
                if username == 'username' and password == 'password':
                    print("\033[32;1mUser has passed authentication \033[0m")
                    res = func(*args, **kwargs)
                    return res
                else:
                    exit("\033[31;1mInvalid username or password\033[32;0m")
            elif auth_type == "bbs":
                pass
            else:
                pass

        return wrapper

    return outer_wrapper


@auth(auth_type="local")
def index():
    print("welcome to index page")


@auth(auth_type="local")
def home(val):
    print("welcome to home page")
    return "from %s" % (val)


@auth(auth_type="bbs")
def bbs():
    print("welcome to bbs page")


index()
print(home("home"))
bbs()

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐