一:装饰器的作用就是在原来函数的基础上增加了一些扩展的功能,因为我们开始写的函数已经投入应用了,所以不能对原函数进行修改,也不能修改对它的调用方式,即“开放封闭原则”,封闭:就是说不能对已经使用的函数进行任何修改;开放:就是说虽然不能对原函数进行修改,但是我们可以进行扩展,以增加新的功能。当然我们也可以在执行某些函数之前需要执行其它固定函数,也可以作为装饰器函数的应用,比如登陆操作,无论进入那个功能函数,都需要提前进行登陆,所以可以把登陆功能作为其它功能函数的装饰器来用。
example 1:需求:对已经投入使用的函数 foo() 增加了一个函数运行时间的功能,并且不能改变其原来的调用方式。
1 # 需求:在不改变调用方式的情况下,给要求的函数加上计算执行时间的功能 2 3 import time 4 5 def show_time(f): 6 def inner(): 7 start = time.time() 8 f() 9 end = time.time() 10 print('spend %s' % (end - start) ) 11 return inner 12 13 @show_time # foo = show_time(foo) 14 def foo(): 15 print('foo...') 16 time.sleep(2) 17 18 foo() # 仍以原来的方式进行调用