python装饰器学习案例

该案例是介绍装饰器不含参和含参的区别和使用方式:

不改变原来核心业务逻辑的基础上(如充电、自我介绍),新增外加功能(计时),

装饰器的应用场景:

日志记录: 装饰器可用于记录函数的调用信息、参数和返回值。

性能分析: 可以使用装饰器来测量函数的执行时间。

权限控制: 装饰器可用于限制对某些函数的访问权限。

缓存: 装饰器可用于实现函数结果的缓存,以提高性能。

复制代码
#写一个充电的功能
import time
#定义一个装饰器:无参,用于统计计算一个程序执行的时长
def count_time(func):
    def wrapper(*args,**kwargs):
        start_time = time.time()
        response = func(*args,**kwargs)
        end_time = time.time()
        use_time = int(end_time-start_time)
        print(f"\n耗时{use_time}秒")
        return response
    return wrapper

#定义一个传参的装饰器,执行者是谁
def outer(name):
    def inner(func):
        def wrapper(*args,**kwargs):
            start_time = time.time()
            response = func(*args,**kwargs)
            end_time = time.time()
            use_time = int(end_time-start_time)
            print(f"\n耗时{use_time}秒,属于{name}操作")
            return response
        return wrapper
    return inner

@count_time
def charge(num):
    for i in range(num,101):
        time.sleep(0.05)
        print(f"\r充电中{'▋'*i}{i}%",end="")
@count_time
def introduce(name,age,job):
    time.sleep(2)
    print(f"大家好,我的名字叫{name},我今年{age}岁了,我的是从事{job}工作,很高兴认识大家,谢谢!")
    time.sleep(2)


@outer("李四")
def introduce1(name,age,job):
    time.sleep(2)
    print(f"大家好,我的名字叫{name},我今年{age}岁了,我的是从事{job}工作,很高兴认识大家,谢谢!")
    time.sleep(2)

@outer(name="张三")
def charge1(num):
    for i in range(num,101):
        time.sleep(0.05)
        print(f"\r充个电中{'▋'*i}{i}%",end="")

charge(40)
introduce("张三",22,"python开发工程师")
charge1(20)
introduce1("李四",24,"python开发工程师")
相关推荐
Julien200426 分钟前
管理机密(一)
运维·服务器·开发语言·学习方法
Chen_harmony29 分钟前
七、STL与string类
开发语言·c++
沐晓时光36 分钟前
C语言入门,字符串和字符串函数知识讲解
c语言·开发语言
小小张说故事1 小时前
Python 的 obj.x 到底按什么顺序找?拆开数据描述符、实例字典和 __getattr__ 那条优先级链
python
xxxiugou1231 小时前
C++命名空间与引用全解析
开发语言·c++
用户11481867894842 小时前
水印的实现方式逻辑
前端·python
La Pulga2 小时前
【FreeRTOS源码学习笔记】空闲任务与阻塞延时
笔记·mcu·学习·嵌入式·freertos·实时操作系统
贾公子2 小时前
从单条内容到账号维度——AIGC 风险评分的工程实现
后端·python
蒸蒸yyyyzwd2 小时前
秋招学习笔记 day106
笔记·学习
yangmu32032 小时前
编程语言发展简史:从机器指令到智能协作
开发语言