欢迎访问宙启技术站
智能推送

Python函数:使用装饰器函数增强函数功能

发布时间:2023-06-29 13:44:37

Python中的装饰器函数是一种语法糖,它可以用于在不修改原函数代码的情况下增强函数的功能。装饰器函数实际上是一个闭包函数,它接受一个函数作为参数,并返回一个新的函数。

装饰器函数可以用来实现一些常用的功能,比如日志记录、性能分析、缓存等。下面我们就来介绍一些常见的装饰器函数。

1. 记录日志:装饰器可以用来记录函数的调用日志,以便排查问题或分析性能。我们可以在装饰器函数中添加一些代码,比如打印函数名称和参数,记录函数的执行时间等。

import time

def log(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"函数 {func.__name__} 执行时间:{end_time - start_time}秒")
        return result
    return wrapper

@log
def add(a, b):
    return a + b

print(add(1, 2))

2. 缓存结果:装饰器可以用来缓存函数的结果,避免重复计算。我们可以使用一个字典来保存函数的参数和对应的结果,每次调用函数时,先检查结果是否已经缓存,如果是则直接返回缓存的结果,如果否则计算结果并缓存。

def cache(func):
    results = {}
    def wrapper(*args, **kwargs):
        key = str(args) + str(kwargs)
        if key in results:
            return results[key]
        else:
            result = func(*args, **kwargs)
            results[key] = result
            return result
    return wrapper

@cache
def fib(n):
    if n <= 1:
        return n
    else:
        return fib(n-1) + fib(n-2)

print(fib(10))

3. 验证权限:装饰器可以用来验证用户的权限,确保用户有权访问某个函数或页面。我们可以在装饰器函数中添加一些权限验证的代码,比如检查用户是否登录、是否有访问权限等。

def login_required(func):
    def wrapper(*args, **kwargs):
        if not is_logged_in():
            return "请先登录"
        else:
            return func(*args, **kwargs)
    return wrapper

@login_required
def admin_page():
    return "管理员页面"

print(admin_page())

装饰器函数的灵活性和可重用性使得它成为Python中非常强大的功能增强工具。通过使用装饰器,我们可以在不修改原函数代码的情况下,实现各种功能的增强,使代码更加简洁、优雅。