1、装饰器(无参数)
import time
def detecator_test(func):
def inner():
start = time.time()
func()
end = time.time()
print('耗时:', end - start)
return inner
@detecator_test
def print_time():
time.sleep(1.5)
print('aaaaaaaaaa')
print_time()
2、装饰器(有参数)
def edge_check(func):
def inner(a,b):
# if func=='sub':
# if a.x-b.x<0:
# a.x=a.x+200
# if a.y-b.y<0:
# a.y=a.y+200
a=Coordinate(a.x if a.x>0 else 0,a.y if a.y>0 else 0)
b=Coordinate(b.x if b.x>0 else 0,b.y if b.y>0 else 0)
ab=func(a,b)
ab=Coordinate(ab.x if ab.x>0 else 0,ab.y if ab.y>0 else 0)
return ab #如果被装饰函数有return ,装饰器的内层函数也要有return
return inner
class Coordinate(object):
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return "Coord: " + str(self.__dict__)
@edge_check
def add(a, b):
return Coordinate(a.x + b.x, a.y + b.y)
@edge_check
def sub(a, b):
return Coordinate(a.x - b.x, a.y - b.y)
one = Coordinate(100, 200)
two = Coordinate(400, 200)
res_add=add(one,two)
res_sub=sub(one,two)
print(res_sub)
print(res_add)
3、通用的装饰器
def outter(func):
def inner(*args,**kwargs):
print('传入的参数:',args,kwargs)
func(*args,**kwargs)
return inner
@outter
def test(x,y):
print(x+y)
test(1,2)