def decorator(func): def wrapper(x): print("start") func(x) print("stop") return wrapper @decorator def hi(x): print(x) hi(12345678) #a=decorator(hi) #hi=a #hi(12345678)使用装饰器的目的不再赘述。 装饰器的实现利用了python中闭包的特性,闭包基于python中一切皆对象的规则,如函数对象可以被当作返回值抛出,list、dict等结构可以存储对象或函数等。 外层函数的返回值为内层函数的引用,这样形式的嵌套函数被称为闭包,即例子中decorator函数。 装饰器即定义一个闭包,但是它接收的参数是一个函数(即需要被装饰的函数),这个传入的函数,最终流转进闭包中内层函数。由于闭包的特性,内层函数的引用最终被外层函数作为返回值抛出,接收并处理这个返回值即可。