欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python 装饰器

程序员文章站 2022-06-01 20:23:15
...
"""
    装饰器:
        定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能
        原则: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()

相关标签: 装饰器