想统计一个函数的执行时间,如果每个函数里都写start=time.time()和end=...,太重复了。我就写了一个def timer(func):,里面定义一个wrapper,在调用func前后计时并打印,然后返回wrapper。用的时候在函数上加@timer,一下就明白了:装饰器本质上是一个接受函数作为参数、返回新函数的函数。它没有魔法,只是语法糖。