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开发工程师")
相关推荐
懒大王爱吃狼几秒前
Python视频解码库DeFFcode使用指南
开发语言·python·音视频·python基础·python学习
跳跳的向阳花2 分钟前
04、JUC并发编程之:简单概述(四)
java·开发语言·cas·juc·volatile·原子引用·原子整数
hnmpf19 分钟前
flask-admin 在modelview 视图中重写on_model_change 与after_model_change
后端·python·flask
hnmpf21 分钟前
flask-admin 框架下添加menu_links 菜单
后端·python·flask
B站计算机毕业设计超人26 分钟前
计算机毕业设计Hadoop+Spark美团美食推荐系统 美团餐厅推荐系统 美团推荐系统 美食价格预测 美团爬虫 美食数据分析 美食可视化大屏
大数据·hadoop·python·机器学习·课程设计·数据可视化·推荐算法
IT古董37 分钟前
【机器学习】机器学习的基本分类-自监督学习-对比学习(Contrastive Learning)
人工智能·学习·机器学习·分类
??? Meggie43 分钟前
【Python】selenium结合js模拟鼠标点击、拦截弹窗、鼠标悬停方法汇总(使用 execute_script 执行点击的方法)
javascript·python·selenium
风雅GW1 小时前
本地LLM部署--llama.cpp
linux·c++·人工智能·python·docker·llama
林泽毅1 小时前
SwanLab x LLaMA Factory:国产开源AI训练工具组合拳(含教程)
人工智能·python·机器学习·开源·大模型·llama·swanlab
slb1906231 小时前
python小项目:使用多剪贴板自动回复消息
开发语言·python