Python装饰器函数的作用和用法。
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 开发中非常实用的编程工具。
