Python 装饰器:为函数添加一点魔力

摘要:在 Python 中,有一个简洁的东西,称为一等函数。这意味着可以像对待任何其他变量一样对待函数。可以将它们作为参数传递,从其他函数返回它们,甚至将它们分配给新名称。装饰器利用了这一点,让以超级干净和流畅的方式调整或增强功能的行为。

在 Python 中,有一个简洁的东西,称为一等函数。这意味着可以像对待任何其他变量一样对待函数。可以将它们作为参数传递,从其他函数返回它们,甚至将它们分配给新名称。装饰器利用了这一点,让以超级干净和流畅的方式调整或增强功能的行为。

想象一下,有一堆函数,想知道每个函数需要多长时间才能运行。可以创建一个装饰器来为您处理此问题,而不是用计时代码填充每个函数。

import timedef timing_decorator(func): def wrapper(*args, **kwargs): start_time = time.time result = func(*args, **kwargs) end_time = time.time print(f"{func.__name__} took {end_time - start_time} seconds to run.") return result return wrapper@timing_decoratordef slow_function: # Let's pretend this is a slow function time.sleep(2)slow_function

该 timing_decorator 函数将另一个函数 func 作为其特殊客户机,用计时代码包装它,并将其作为新函数(称为 wrapper )提供。当使用 @timing_decorator on slow_function 时,它会自动测量函数运行所需的时间。这像在你的代码上撒了一层魔法!

在 Python 中,使用 @ 符号将装饰器应用于函数。这是一种获得与以下代码相同的结果的奇特方法,但以更简洁、更 Python 的方式:

def slow_function: # Pretend this is a slow function time.sleep(2)slow_function = timing_decorator(slow_function)

该 @ 符号将一些看起来有点凌乱的东西转化为整洁优雅的 Python 传统。

在许多实际情况下,装饰师可以成为您的伙伴:

身份验证:可以创建装饰器来检查是否允许某人访问 Web 应用的某些部分。日志记录:装饰器可以跟踪函数调用,从而更轻松地查看代码中发生的情况。缓存:通过缓存昂贵的函数调用结果来节省时间。授权:检查用户是否有权执行特定操作。验证:在函数开始执行其操作之前,请确保函数的输入是 A 正常的。

甚至可以将多个装饰器堆叠在一起,以创建一些非常花哨的行为。这意味着可以构建超级灵活且可重用的代码。

@timing_decorator@log_decoratordef complex_function: # Do something complexcomplex_function

来源:自由坦荡的湖泊AI一点号

相关推荐