python装饰器

# 类装饰器
class Foo(object):
    def __init__(self, func):
        self._func = func

    def __call__(self):
        print ('class decorator runing')
        self._func()
        print ('class decorator ending')

@Foo
def bar():
    print ('bar')

bar()

# 装饰器执行顺序
@a
@b
@c
def f ():
    pass
# 执行顺序是从里到外,等效于f = a(b(c(f)))

例子:

#一个name对应一个方法
METHOD_MAP={}
def crawl_method(*name):
    def wrapper(func):
        for n in name:
            METHOD_MAP[n]=func
        def decorator(*args,**kwargs):
            print('aab')
            return func(*args,**kwargs)
        return decorator
    return wrapper
@crawl_method('sss','aaa')
def tes():
    print('sss')
print(METHOD_MAP)
# 记录函数执行时间,报错日志的装饰器
import os
filename=os.path.basename(__file__)
def log(*text):#传参
    def time_clock(func):#传func
        def task_func(*args, **kwargs):#传func参
            a1=time.time()
            print(args[0])
            try:
                res = func(*args,**kwargs)
                a2=time.time()
                print(text[0],a2-a1)
                return res #返回func的默认返回
            except Exception as e:
                print(filename,func.__name__,e)
                return 0
        return task_func
    return time_clock

@log('clock')
def task(x):
    # time.sleep('1')
    time.sleep(1)
    return 1

a=task('x')
print(a)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值