程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

【python】装饰器的原理(python中的装饰器有哪些)

hfteth 2025-03-29 17:47:08 技术文章 9 ℃

装饰器的原理是利用了Python的函数特性,即函数可以作为参数传递给另一个函数,也可以作为另一个函数的返回值。装饰器本质上是一个接受一个函数作为参数,并返回一个新函数的函数。这个新函数通常会在执行原函数之前或之后添加一些额外的功能,从而实现对原函数的修改或增强。装饰器的语法是使用@符号,放在原函数的定义之前,表示将原函数作为参数传递给装饰器函数,并将返回的新函数替换原函数。

例如,下面是一个用于计算函数运行时间的装饰器的例子:

import time

def my_decorator(func): # 定义一个装饰器函数
    def wrapper(*args, **kwargs): # 定义一个包装函数
        start_time = time.time() # 记录开始时间
        result = func(*args, **kwargs) # 调用原函数
        end_time = time.time() # 记录结束时间
        print("Function took {:.6f} seconds.".format(end_time - start_time)) # 打印运行时间
        return result # 返回原函数的结果
    return wrapper # 返回包装函数

@my_decorator # 使用装饰器
def my_function(x): # 定义一个需要被装饰的函数
    time.sleep(x) # 模拟耗时操作
    return x # 返回参数

print(my_function(2)) # 调用被装饰的函数

输出结果是:

Function took 2.000163 seconds.
2

可以看到,装饰器函数my_decorator接收一个函数func作为参数,并返回一个包装了原始函数的新函数wrapper。在wrapper函数中,我们在调用原始函数之前和之后分别记录了时间,并打印了运行时间。当我们使用@my_decorator修饰my_function时,相当于执行了my_function = my_decorator(my_function),即将my_function替换为wrapper。因此,当我们调用my_function时,实际上是调用了wrapper,从而实现了对my_function的修改。

Tags:

最近发表
标签列表