python 装饰器的实现过程


1、装饰器

在这里插入图片描述
举例:
在这里插入图片描述

2、装饰器的实现原理等价于下图所示:

在这里插入图片描述

3、装饰器的作用举例——使用装饰器计算得到程序运行的时间

在这里插入图片描述

4、对没有参数、没有返回值的函数进行装饰:

在这里插入图片描述

5、对有参数、没有返回值的函数进行装饰:

在这里插入图片描述
输出结果如下:
在这里插入图片描述

6、对不定长参数的函数的装饰器

在这里插入图片描述
输出结果如下所示:
在这里插入图片描述

7、对有返回值的不定长参数的函数装饰器(即:通用装饰器)

在这里插入图片描述
运行结果如下所示:
在这里插入图片描述

8、多个装饰器对一个函数装饰

在这里插入图片描述
运行结果如下所示:
在这里插入图片描述

8、多个装饰器对一个函数装饰的demo

示例1:

在这里插入图片描述
运行结果如下图所示:
在这里插入图片描述

示例2:(即:装饰是从最内层逐渐向最外层装饰)

在这里插入图片描述

运行结果如下所示:
在这里插入图片描述

9、使用类对一个函数装饰的demo

在这里插入图片描述
运行结果如下图所示:
在这里插入图片描述

10、带参数的装饰器

(1)低配版(现实中使用不显示)

在这里插入图片描述
运行结果如下所示:
在这里插入图片描述

(2)高配版(实际开发中使用)

在这里插入图片描述
运行结果如下所示:
在这里插入图片描述
原理解释如下所示:
在这里插入图片描述
代码举例,如下:

import re

URL_FUNC_DICT=dict()

def route(url):
    def set_func(func):
        URL_FUNC_DICT[url]=func
        def call_func(*args,**kwargs):
            return func(*args,**kwargs)
        return call_func
    return set_func

@route("/index.py")
def index():
    with open("./templates/index.html",encoding="utf-8") as f:
        content = f.read()

    my_stock_info = "哈哈哈哈 这是你的本月名称....."

    content = re.sub(r"\{%content%\}", my_stock_info, content)

    return content
     
@route("/center.py")
def center():
    with open("./templates/center.html",encoding="utf-8") as f:
        content = f.read()

    my_stock_info = "这里是从mysql查询出来的数据。。。"

    content = re.sub(r"\{%content%\}", my_stock_info, content)

    return content
     

def application(env, start_response):
    start_response('200 OK', [('Content-Type', 'text/html;charset=utf-8')])
    
    file_name = env['PATH_INFO']

    """
    if file_name == "/index.py":
        return index()
    elif file_name == "/center.py":
        return center()
    else:
        return 'Hello World! 我爱你中国....'
    """
    try:
        func=URL_FUNC_DICT[file_name]
    except Exception as e:
        return "产生了异常:%s"%(str(e))
    else:
        return func()

使用带有参数的装饰器进行权限级别的验证(代码举例)

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值