Python装饰器:给你的函数穿上“外套”

简介: Python装饰器:给你的函数穿上“外套”

Python装饰器:给你的函数穿上“外套”

想象你有一个普通的函数,就像一件T恤。它能完成基本任务,但有时你需要添加额外功能,比如日志记录、权限检查或性能监测,而不改动原来的T恤。这时,Python的装饰器就像一件外套,可以随时穿上或脱下。

装饰器本质上是一个高阶函数,它接收一个函数并返回一个新的函数。穿上外套后,每次调用函数时,外套会先执行一些额外代码,再让里面的函数干活。

举个例子,你想记录每个函数的执行时间。可以定义一个计时装饰器:

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f"{func.__name__} 耗时 {end-start:.2f}秒")
        return result
    return wrapper

@timer
def slow_function():
    time.sleep(1)

slow_function()  # 输出:slow_function 耗时 1.00秒

这里,@timer就像给slow_function穿上了一件计时外套,原函数无需任何修改。

装饰器让代码更简洁、可复用,遵循了“开放封闭原则”。下次你需要给函数加功能时,不妨试试这件神奇的“外套”吧!

相关文章
|
4月前
|
机器学习/深度学习 人工智能 缓存
让AI评测AI:构建智能客服的自动化运营Agent体系
大模型推动客服智能化演进,从规则引擎到RAG,再到AI原生智能体。通过构建“评估-诊断-优化”闭环的运营Agent,实现对话效果自动化评测与持续优化,显著提升服务质量和效率。
2142 86
让AI评测AI:构建智能客服的自动化运营Agent体系
|
3月前
|
存储 自然语言处理 测试技术
一行代码,让 Elasticsearch 集群瞬间雪崩——5000W 数据压测下的性能避坑全攻略
本文深入剖析 Elasticsearch 中模糊查询的三大陷阱及性能优化方案。通过5000 万级数据量下做了高压测试,用真实数据复刻事故现场,助力开发者规避“查询雪崩”,为您的业务保驾护航。
1636 89
|
3月前
|
供应链 数据可视化 数据挖掘
1688运营自学全套流程,新店如何快速获得转化的指南!
新手入驻1688常因缺乏运营框架而难出单。本文系统解析平台搜索机制、流量布局与店铺成长路径,涵盖类目定位、双端差异化运营、产品矩阵搭建及三阶段进阶策略,助力商家快速掌握核心逻辑,实现高效成交。
|
3月前
|
设计模式 缓存 监控
Python装饰器:优雅的代码增强术
Python装饰器:优雅的代码增强术
299 111
|
3月前
|
安全 编译器 API
PHP 8.4 新特性实战:用 `match` 表达式告别繁琐的 `switch`
PHP 8.4 新特性实战:用 `match` 表达式告别繁琐的 `switch`
|
3月前
|
存储 人工智能 运维
一行代码实现智能异常检测:UModel PaaS API 架构设计与最佳实践
阿里云 UModel PaaS API 发布:通过 Table + Object 双层抽象,屏蔽存储差异、自动处理字段映射与过滤条件,让每一个实体都成为一个‘可调用的对象’,真正实现‘以实体为中心’的智能可观测。
904 137
|
3月前
|
数据采集 人工智能 运维
AgentRun 实战:快速构建 AI 舆情实时分析专家
搭建“舆情分析专家”,函数计算 AgentRun 快速实现从数据采集到报告生成全自动化 Agent。
934 58
|
7月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
478 2