Python装饰器:优雅的函数增强术

简介: Python装饰器:优雅的函数增强术

Python装饰器:优雅的函数增强术

在Python中,装饰器(Decorator)是一种强大的语法特性,它允许我们在不修改原函数代码的情况下,为其添加新功能。这种“元编程”能力使代码更加模块化和可复用。

装饰器基础

装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新函数。最常见的用途包括日志记录、性能测试、权限校验等。

def simple_decorator(func):
    def wrapper():
        print("函数执行前")
        func()
        print("函数执行后")
    return wrapper

@simple_decorator
def say_hello():
    print("Hello, World!")

say_hello()

带参数的装饰器

实际开发中,我们常常需要装饰器能够接受参数:

import time

def timer_decorator(repeat=1):
    def decorator(func):
        def wrapper(*args, **kwargs):
            total_time = 0
            for _ in range(repeat):
                start = time.time()
                result = func(*args, **kwargs)
                total_time += time.time() - start
            print(f"平均执行时间: {total_time/repeat:.4f}秒")
            return result
        return wrapper
    return decorator

@timer_decorator(repeat=3)
def heavy_computation():
    return sum(i**2 for i in range(10000))

类装饰器

除了函数装饰器,Python还支持类装饰器,通过实现__call__方法来实现:

class CountCalls:
    def __init__(self, func):
        self.func = func
        self.call_count = 0

    def __call__(self, *args, **kwargs):
        self.call_count += 1
        print(f"函数已被调用{self.call_count}次")
        return self.func(*args, **kwargs)

@CountCalls
def process_data():
    # 数据处理逻辑
    pass

最佳实践

  1. 使用functools.wraps保留原函数的元数据
  2. 保持装饰器的单一职责
  3. 考虑装饰器的执行顺序(从内到外)

装饰器是Python优雅设计哲学的完美体现,合理使用能让代码更加简洁、可维护。掌握这一特性,你将在Python开发中游刃有余。

相关文章
|
3天前
|
Python
Python中的f-string:让字符串格式化更优雅
Python中的f-string:让字符串格式化更优雅
197 131
|
3天前
|
安全 数据库连接 开发者
用Python上下文管理器,优雅管理你的资源
用Python上下文管理器,优雅管理你的资源
167 131
|
3天前
|
缓存 监控 开发者
Python装饰器:让代码优雅加倍
Python装饰器:让代码优雅加倍
184 134
|
3天前
|
开发者 Python
Python 小技巧:你可能没完全掌握的 f-string 高级用法
Python 小技巧:你可能没完全掌握的 f-string 高级用法
174 132
|
3天前
|
设计模式 缓存 监控
Python装饰器:让代码优雅的神奇工具
Python装饰器:让代码优雅的神奇工具
165 130
|
3天前
|
API 数据安全/隐私保护 计算机视觉
用Python批量处理图片,5分钟搞定一天的工作
用Python批量处理图片,5分钟搞定一天的工作
202 128
|
11天前
|
存储 安全 搜索推荐
PHP:网站背后的“魔术师”
PHP:网站背后的“魔术师”
175 125
|
3天前
|
安全 Unix API
告别混乱时间处理:Python中time与datetime模块的实用选择
告别混乱时间处理:Python中time与datetime模块的实用选择
190 126
|
11天前
|
架构师 编译器 PHP
PHP 8:让代码更优雅的进化
PHP 8:让代码更优雅的进化
175 127
|
3天前
|
设计模式 缓存 测试技术
Python装饰器:让代码简洁优雅的魔法工具
Python装饰器:让代码简洁优雅的魔法工具
179 122

热门文章

最新文章