python 装饰器

"""
    装饰器:
        定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能
        原则: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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值