Python 中的装饰器是一种特殊的函数,它可以在不修改原函数的代码的情况下,给原函数增加一些额外的功能。装饰器的作用是让代码更简洁,更优雅,更Pythonic。
装饰器的原理是利用了 Python 的函数也是对象的特性,以及闭包和高阶函数的概念。闭包是指一个函数可以访问并修改它外部作用域的变量。高阶函数是指一个函数可以接受另一个函数作为参数,或者返回另一个函数作为结果。
装饰器的语法格式是:
@decoratordef func(): # do something这相当于:
func = decorator(func)也就是说,装饰器会把原函数作为参数传给自己,然后返回一个新的函数,这个新的函数会在执行原函数之前或之后做一些额外的操作。
例如,可以定义一个装饰器,用来计算一个函数的执行时间:
import timedef timeit(func): def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) end = time.time() print(f"{func.__name__} took {end - start} seconds to run.") return result return wrapper@timeitdef add(a, b): return a + bprint(add(1, 2))# 输出:# add took 1.1920928955078125e-06 seconds to run.# 3