码迷,mamicode.com
首页 > 其他好文 > 详细

4-2日装饰器,带参数的装饰器

时间:2018-04-02 13:45:14      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:for   span   处理   end   完成   相关   body   登录   print   

1,函数的有用信息

from functools import wraps#引用模块
def wrapper(f):  # f = func1
    @wraps(f)
    def inner(*args,**kwargs): #聚合
        #args (1,2,3)
        ‘‘‘执行函数之前的相关操作‘‘‘
        ret = f(*args,**kwargs)  # 打散 1,2,3
        ‘‘‘执行函数之后的相关操作‘‘‘
        return ret
    return inner

2,装饰器的应用场景:比如插入日志,性能测试,事务处理,缓存等等场景。

def func1():
    """
    此函数是什么功能,参数分别是什么作用。
    :return: 返回值是登录成功与否(True,False)
    """
    print(999)

    return True

func1()
print(func1.__name__)
print(func1.__doc__)
def func1():
    """
    此函数是完成什么的功能,参数分别是。。。作用。
    :return: 返回值是登录成功与否(True,False)
    """
    print(666)


    print(func1.__name__)
    print(func1.__doc__)
    return True
func1()

3,装饰器带多个参数

import time
def timmer(*args,**kwargs):
    def wrapper(f):
        def inner(*args,**kwargs):
            if flag:
                start_time = time.time()
                ret = f(*args,**kwargs)
                time.sleep(0.3)
                end_time = time.time()
                print(此函数的执行效率%f % (end_time-start_time))
            else:
                ret = f(*args, **kwargs)
            return ret
        return inner
    return wrapper

flag = True
@timmer(flag,2,3)  # 两步:1,timmer(flag) --> wrapper 2,@wrapper 装饰器
def func1():
    print(666)


@timmer(flag)
def func2():
    print(777)
func1()
func2()

4,多个装饰器装饰一个参数

def wrapper1(func):  # func ==  f函数名
    def inner1():
        print(wrapper1 ,before func)  # 2
        func()
        print(wrapper1 ,after func)  # 4
    return inner1

def wrapper2(func):  # func == inner1
    def inner2():
        print(wrapper2 ,before func)  # 1
        func()
        print(wrapper2 ,after func)  # 5
    return inner2
# @wrapper3
@wrapper2  #  f = wrapper2(f)  里面的f==inner1  外面的f == inner2
@wrapper1  # f = wrapper1(f)   里面的f==函数名f  外面的f == inner1
def f():  # 3
    print(in f)

f()  # inner2()

 

 

4-2日装饰器,带参数的装饰器

标签:for   span   处理   end   完成   相关   body   登录   print   

原文地址:https://www.cnblogs.com/yzxing/p/8692313.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!