开放封闭原则:
可以为函数增加功能,但不能更改原函数;
import time
1)无参
import time def show_time(f): def inner(): s = time.time() f() e = time.time() print(e-s) return inner @show_time #foo = show_time(foo) def foo(): print("foo") time.sleep(2) #foo = show_time(foo) foo()
2)为功能函数增加参数
def show_time(f): def inner(*x,**y): s = time.time() f(*x,**y) e = time.time() print(e-s) return inner @show_time #foo = show_time(foo) def foo(*args,**kwargs): sums = 0 for i in args: sums+= i print("sums",sums) time.sleep(2) #foo = show_time(foo) foo(1,2,3)
3)为装饰器增加参数
def logger(flag = ''): def show_time(f): def inner(*x,**y): s = time.time() f(*x,**y) e = time.time() print(e-s) if flag == 'true': print('logger') return inner return show_time @logger('true') #相当于@showtime,由于闭包的原因有了flag参数 def foo(*args,**kwargs): sums = 0 for i in args: sums+= i print("sums",sums) time.sleep(2) #foo = show_time(foo) foo(1,2,3)