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

Python装饰器:让你的代码更优雅

发布时间:2023-12-11 03:00:31

Python装饰器是一种函数,用于修改其他函数的功能。装饰器本质上是一个函数,它接受一个函数作为输入,并返回一个新的函数作为输出。这使得装饰器可以在不修改原始函数的情况下,增加或修改其功能。

装饰器在Python中常用于以下场景:

1. 在不修改原始函数的情况下,增加额外的功能,如日志记录、性能分析等。

2. 在调用原始函数之前或之后执行一些操作,如权限检查、参数验证等。

3. 以某种方式修改原始函数的输出,如缓存结果、转换返回值等。

下面通过一个简单的例子来演示装饰器的使用。

import time

def timer(func):
    def wrapper():
        start = time.time()
        func()
        end = time.time()
        print(f"函数执行时间:{end - start}秒")
    return wrapper

# 被装饰函数
@timer
def hello():
    time.sleep(1)
    print("Hello, World!")

# 调用被装饰函数
hello()

在上面的例子中,我们定义了一个名为timer的装饰器函数。它接受一个函数作为输入,并返回一个新的函数wrapperwrapper函数在调用原始函数之前记录了开始时间,在调用原始函数之后记录了结束时间,并打印出函数执行时间。

hello函数定义之前加上@timer,相当于将hello函数作为参数传递给timer装饰器。这样,每当调用hello函数时,实际上会调用装饰器返回的wrapper函数。wrapper函数会在调用原始函数之前和之后执行额外的操作。

运行上述代码,输出如下:

Hello, World!
函数执行时间:1.0010101795196533秒

可以看到,通过装饰器函数,我们无需修改hello函数的定义,就能够在函数执行前后添加额外的功能。

除了上述示例中的计时功能,装饰器还可以用于日志记录、权限控制、缓存等场景。由于装饰器本身就是函数,因此可以在需要的地方使用,使代码更加简洁、优雅。