首页 > 编程语言 >Python 装饰器 详解+案例

Python 装饰器 详解+案例

时间:2024-07-22 11:54:35浏览次数:10  
标签:fun1 函数 fun2 Python 案例 详解 time print datas

Python装饰器是一种特殊的函数,用于修改其他函数的功能。装饰器可以在不改变原函数代码的情况下,对函数进行增加、修改或者扩展功能。

装饰器的语法形式是在函数定义前使用@符号,并在 @ 后面加上装饰器的名称。装饰器函数接受被装饰函数作为参数,并返回一个修改后的函数。


import random
import time

datas = [random.randint(0, 10000) for i in range(10000)]
# 通过浅拷贝 得到内容一模一样的列表
datas_copy = datas.copy()


# def my_fun1():
#     start = time.time()
#     datas.sort()
#     print(datas)
#     print("my_fun1", time.time()-start)
#
# my_fun1()
#
# def my_fun2():
#     start = time.time()
#     new_list = sorted(datas_copy)
#     print(new_list)
#     print(f"my_fun2", time.time()-start)
#
# my_fun2()

# 不改变两个函数原本的实现 给函数添加时间开销的功能

# 1. 外部函数嵌套内部函数  2. 外部函数返回内部函数 3.内部函数访问外部函数局部变量

def time_cost(f):
    def calc():
        start = time.time()
        f()
        print(f"结束执行: {f.__name__} 消耗时间 {time.time()-start}")


    return calc

@time_cost
def fun1():
    datas.sort()
    print(datas)

# fun1 = time_cost(fun1)
fun1()

# fun1()


@time_cost
def fun2():
    new_datas = sorted(datas_copy)
    print(new_datas)


# fun2 = time_cost(fun2)
fun2()
# fun2()

标签:fun1,函数,fun2,Python,案例,详解,time,print,datas
From: https://blog.csdn.net/zhangzhaoyuxunlei/article/details/140605886

相关文章

  • 如何在 vercel 部署中路由 python 和 typescript 无服务器函数
    我从一个带有Next.js和Typescript前端以及python后端的全栈应用程序开始。由于我们想在vercel上部署,因此我们将所有后端功能迁移到/api文件夹中的typescript函数中,可通过以下方式访问:fetch('api/**foldername**)问题是我有一个简单的pytorch模型,因此......
  • 项目管理之风险管理案例-项目交付风险
    项目管理之风险管理案例-项目交付风险背景      XX某项目合同中已有采购国产化数据库-达梦DM8数据库管理系统,但实际现行信息系统建设与交付项目中使用MySQL数据库。项目经理没有尽早与技术经理沟通,技术经理在项目启动后一年后才知道项目交付中有达梦数据库软件,但此时信息系......
  • python中datetime模块
    datetime模块可以更方便的显示日期,并对日期进行计算。datetime模块中常用的类及其功能描述如下:datetime.datetime------>表示日期时间的类(常用)datetime.timedelta------>表示时间间隔的类(常用)datetime.date------>表示日期的类datetime.time------>表示时间的类datetime.......
  • Python - requests
    前言:介绍:安装及验证:使用:连续接口请求:传参方式: 前言:当你上班无聊的时候,你做什么,说实话有人让我写个requests的教程,教程我觉得网上已经有很多教程了,也很全面,我还是不要献丑了介绍:哎,我认为就是一个接口请求的仓库,不过requests属于第三方库,......
  • Vue3 - 详解实现网站使用企业微信二维码扫描登录,企业微信授权第三方网站接入企业微信
    前言如果您需要Vue2版本,请访问这篇文章。在vue3|nuxt3网站开发中,详解实现网页集成使用“企业微信扫一扫登录”功能,用户使用手机企业微信app扫描网站的登录二维码后,获取用户身份信息及号码并完成授权登录教程,新手小白完整流程及示例运行代码,支持多种企业微信二......
  • U盘乱码文件恢复:高效数据恢复方法详解
    U盘作为我们日常生活和工作中常见的存储设备,时常用于数据的传输和保存。然而有时我们会发现U盘中的文件出现了乱码,这给我们的数据管理和使用带来了极大的不便。那么U盘乱码文件究竟是如何产生的?又该如何恢复呢?一、U盘乱码原因分析病毒感染:使用公共电脑后,U盘可能感染病毒,导致......
  • 【云原生】Kubernetes中的DaemonSet介绍、原理、用法及实战应用案例分析
    ✨✨欢迎大家来到景天科技苑✨✨......
  • MySQL InnoDB事务隔离和并发控制面试题详解
    1.为什么MySQL使用B+树作为索引而不是B树?MySQL选择使用B+树作为索引主要有以下几个原因:减少IO次数,提高效率:B+树的所有数据都存储在叶子节点,非叶子节点只存储索引,树的高度较低,因此查找路径较短,减少了磁盘IO次数。查询效率更加稳定:由于数据仅存储在叶子节......
  • MySQL事务管理详解:特性、问题与解决方案
    什么是事务?事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上的一组操作,要么都执行,要么都不执行。事务的四大特性原子性(Atomicity)原子性意味着事务中对数据库的一系列操作要......
  • MySQL体系结构与查询执行流程详解
    MySQL体系结构与查询执行过程详解MySQL是一个采用单进程多线程架构模式的关系型数据库管理系统。本文将详细介绍MySQL的体系结构及其查询语句的执行过程,并探讨性能优化的关键点。MySQL体系结构MySQL的架构为Client-Server架构。总体上,我们可以将MySQL的体系结......