Python装饰器

来源:互联网 发布:淘宝客招募网站 编辑:程序博客网 时间:2024/06/07 12:24

1、装饰器(无参数)

import timedef detecator_test(func):    def inner():        start = time.time()        func()        end = time.time()        print('耗时:', end - start)    return inner@detecator_testdef  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 innerclass Coordinate(object):    def __init__(self, x, y):        self.x = x        self.y = y    def __repr__(self):        return "Coord: " + str(self.__dict__)@edge_checkdef add(a, b):    return Coordinate(a.x + b.x, a.y + b.y)@edge_checkdef 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@outterdef test(x,y):    print(x+y)test(1,2)