Python装饰器

装饰器:
函数当作参数,返回替代版本的函数
本质就是一个返回函数的函数

作用:不改变原函数的基础上给函数增加功能

import time
def decorator(func):
    def wrapper():
        func()
        print(time.strftime('%Y-%m-%d'))
    return wrapper

@decorator
def f1():
    print("Now print time...")


# f = decorator(f1)

f1()

可以在定义函数是添加位置参数、关键字参数等

def add_log(add):
    @functools.wraps(add)
    def add_func(*args):
        begin = time.time()
        res = add(*args)
        end = time.time()
        print('['+time.strftime('%Y-%m-%d %H:%M:%S')+']' +
              '\n函数名:'+str(add).split()[1] +
              '\n运行时间:'+str(round(end-begin, 6)) +
              '\n运行返回值结果:'+str(res))
    return add_func

打印帮助文档和程序信息

@functools.wraps(func)

当需要向装饰器内添加参数时,可以在外面嵌套函数

def required_types(*ARG):
    def types(JudgeArgs):
        @functools.wraps(JudgeArgs)
        def judge(*args, **kwargs):
            for N in args:
                if not isinstance(N, ARG):
                    print(str(N) + "TypeError")
                    break
            else:
                res = JudgeArgs(*args,**kwargs)
                return res
        return judge
    return types


@required_types(int, float)
def JudgeArgs(*args):
    res = sum(*args)
    return res


print(JudgeArgs(1, [1, 2, 3]))

如果有多个装饰器,则从内向外执行装饰器

def addNum1(addNum):
    def change():
        addNum()
        print("hello")
    return change

def addNum2(addNum):
    def change():
        addNum()
        print("world")
    return change


@addNum1
@addNum2
def addNum():
    return 1 + 1


print(addNum())

raise可以显示引发异常

raise NameError
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值