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

Python装饰器函数的作用和用法。

发布时间:2023-06-03 03:21:18

Python装饰器是实现细粒度、可复用的代码模块化的工具。装饰器函数也可称为函数修饰符,是指以函数作为输入并返回函数的函数。它是Python高阶函数的重要体现。 Python 装饰器函数的作用主要包括:

1. 引入代码封装的概念。函数的代码可以被大大地简化和统一,达到高度抽象的目的。

2. 对已有函数的功能进行扩展。Python 提供的一些内置函数和模块,可以通过装饰器进行功能的扩展和修饰。比如:Python 的内置函数 @property,可以通过装饰器实现对类的属性进行访问控制的管理。

3. 记录函数的日志信息。通过装饰器函数,可以记录函数的实际调用路径、参数以及执行时间等日志信息,方便进行性能分析和代码优化。

4. 统计函数的执行时间等性能数据信息。装饰器函数还可以实现对函数的性能数据进行统计,方便进行分析和优化。

Python 的装饰器函数的用法主要有两种:

1. 函数修饰器

函数修饰器指的是将一个函数作为参数传递给另一个函数的过程。在 Python 中,函数可以作为变量进行传递,因此我们可以将一个函数作为参数传递给另一个函数,然后在这个函数内部进行封装,返回一个新的函数。这就是函数修饰器的实现。

比如,我们可以通过定义一个 timer() 函数,传入一个函数 f(),并返回一个新的函数,来实现对 f() 函数的运行时间进行统计:

import time

def timer(func):
    def wrapper(*args,**kwargs):
        start_time = time.time()
        func(*args,**kwargs)
        end_time = time.time()
        print("run time is : {}".format(end_time-start_time))
    return wrapper

@timer
def test():
    time.sleep(1)

test()

2. 类修饰器

类修饰器是一个类,它实现了 __call__() 方法。在 Python 中,类可以作为函数进行调用,因此我们可以将一个类作为装饰器,将需要进行装饰的函数作为参数传递给这个类,然后在这个类内部进行封装,返回一个新的函数。这就是类修饰器的实现。

比如,我们可以通过定义一个 LogDecorator 类,实现对函数的日志信息进行记录:

class LogDecorator:
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        print("LogDecorator: calling function ", self.func.__name__)
        self.func(*args, **kwargs)
        print("LogDecorator: function called ", self.func.__name__)

@LogDecorator
def test():
    print("test function called.")

test()

以上就是 Python 装饰器函数的作用和用法。可以看出 Python 装饰器具有非常强大的功能和灵活性,是 Python 开发中非常实用的编程工具。