装饰器

装饰器:
把一个函数当作参数,返回一个替代版的函数
本质就是一个返回函数的函数
作用:在不改变原函数的基础上,给函数增加功能

import time
def decorator(func):##接收原函数
    def wrapper():##装饰器
        print(time.time())
        func()
    return wrapper
@decorator
def f1():
    print('this is a function')

# f = decorator(f1)
f1()
import string
import random
import functools
import time
def add_log(func):###源函数
    """zhuang shi qi
    """
    ##this is an add_log def
    @functools.wraps(fun)##添加说明为原函数,若不加,则说明函数为装饰器函数
    def wrapper(*args,**kwargs):###引入函数
        ##this is a wrapper def

        start = time.time()
        res=func(*args,**kwargs)
        stop = time.time()
        print('name is ' + add_log.__name__)
        print('time is %.6f' %(stop-start))
        print('fan hui zhi is ' + str(res))
        print('def is ' + add_log.__doc__)
    return wrapper
@add_log##使用装饰器
def add(x,y):
    time.sleep(1)
    return x + y
add(1,1)

装饰器类型接收,在外面加一个函数框架接收即可

import functools
def log_kind(*types):
    def get_log(fun):
        @functools.wraps(fun)
        def required_types(*args,**kwargs):
            for i in args:
                if not isinstance(i,types):
                    print('TypeError',types)
                    break
            else:
                inspect_res = fun(*args,**kwargs)
                return inspect_res
        return required_types
    return get_log
@log_kind(int,int)
def get(*args):
    print(args)
a = get(1,2,3,4,5,66,(5,66,4,3,2),'d',2.2)
print(a)

多个装饰器时,装饰器执行顺序为从上往下执行,那个执行器在前就先执行那个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值