当前位置: 首页 > article >正文

学习之什么是装饰器

什么是装饰器

本质:就是一个函数,能为其它的函数增加额外功能
在这里插入图片描述

# 目标函数
def power_num(n):
    """
    计算并返回1-n之间每个数的平方和
    :param n:
    :return:
    """
    total = 0
    for i in range(1, n+1):
        total += i ** 2
"""
额外的功能能统计目标函数执行的耗时
"""
def power_num(n):
    """
    计算并返回1-n之间每个数的平方和
    :param n:
    :return:
    """
    start_time = time()
    total = 0
    for i in range(1, n+1):
        total += i ** 2
    end_time = time()
    print("函数执行的耗时:{}".format(end_time - start_time))
    return total

if __name__ == '__main__':

    print(power_num(30000000))
# 定义装饰函数--能统计目标函数执行的耗时
def elapsed_time(func):
    """能统计目标函数执行的耗时"""

    def decorated(*args, **kwargs):
        start_time = time()
        # 由于目标函数有可能传入一个参数,两个参数或者是关键字参数,所以这里用通用参数占位
        result = func(*args, **kwargs)
        end_time = time()
        print("函数执行的耗时:{}".format(end_time - start_time))
        return result

    return decorated


# 目标函数
def power_num(n):
    """
    计算并返回1-n之间每个数的平方和
    :param n:
    :return:
    """
    total = 0
    for i in range(1, n+1):
        total += i ** 2

    return total


if __name__ == '__main__':
    # 调用装饰函数去装饰目标函数,返回被装饰后的函数  相当于在目标函数上添加@elapsed_time
    # 对目标函数进行elapsed装饰器函数的调用,返回一个装饰后的名字还是叫power_num的函数
    power_num = elapsed_time(power_num)
    print(power_num(30000000))
# 装饰函数需要传入参数
def elapsed_pre(pre):
    """装饰函数需要传入参数"""

    def elapsed_time(func):
        """能统计目标函数执行的耗时"""

        def decorated(*args, **kwargs):
            start_time = time()
            # 由于目标函数有可能传入一个参数,两个参数或者是关键字参数,所以这里用通用参数占位
            result = func(*args, **kwargs)
            end_time = time()
            print("函数执行的耗时:{}".format(round((end_time - start_time), pre)))
            return result

        return decorated

    return elapsed_time


# 目标函数
@elapsed_pre(3)
def power_num(n):
    """
    计算并返回1-n之间每个数的平方和
    :param n:
    :return:
    """
    total = 0
    for i in range(1, n+1):
        total += i ** 2

    return total


if __name__ == '__main__':
	print(power_num(30000000))

http://www.kler.cn/news/324807.html

相关文章:

  • 【django】django项目使用https访问+ssl证书
  • Java基于easyExcel的自定义表格格式
  • 租界服务器跑深度学习(一)服务器租用
  • vue3+AntvS2基本使用与导出excel
  • Golang | Leetcode Golang题解之第436题寻找右区间
  • 长文本溢出,中间位置显示省略号
  • 基于Node.js+Express+MySQL+VUE新闻网站管理系统的设计与实现
  • 小程序原生-地理定位功能介绍和实现
  • Service和Endpoints
  • 使用C#,MSSQL开发的钢结构加工系统
  • 如何在iPad上用Chrome实现无痕浏览
  • Acwing 快速幂
  • 力扣 简单 876.链表的中间结点
  • Leetcode面试经典150题-383.赎金信
  • 2024年【电工(高级)】考试题及电工(高级)考试内容
  • ISO 21434车辆网络安全风险评估的全面流程解析
  • 小柴冲刺软考中级嵌入式系统设计师系列二、嵌入式系统硬件基础知识(3)嵌入式系统的存储体系
  • 大模型落地需要一把“梯子”
  • 酒店智能开关的组成与功能
  • 【第十四周】PyTorch深度学习实践1
  • 浅说差分算法(上)
  • excel-VBA知识点记录
  • 服务器数据恢复—SAN环境下LUN映射出错导致文件系统一致性出错的数据恢复案例
  • 物联网系统中OLED屏主流驱动方案详解
  • 每日OJ题_牛客_HJ108求最小公倍数_C++_Java
  • unixODBC编程(四)插入数据
  • 【js】Node.js的fs的使用方法
  • 长沙某公司.Net高级开发面试题
  • 【C语言零基础入门篇 - 15】:单链表
  • 甄选范文“论应用服务器基础软件”,软考高级论文,系统架构设计师论文