装饰器

一、函数的有用信息

# 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
# #
# # # 函数的执行时,*打散。
# # # 函数的定义时,*聚合。
# # @wrapper  # func1 = wrapper(func1)  func1 = inner
# # def func1(*args): #args (1,2,3)
# #     print(666)
# #     return args
# # print(func1(*[1,2,3]))  # inner(3,5) 打散
#
#
# # def func1():
# #     """
# #     此函数是完成登陆的功能,参数分别是...作用。
# #     :return: 返回值是登陆成功与否(True,False)
# #     """
# #     print(666)
# #     # print(func1.__name__)
# #     # print(func1.__doc__)
# #     return True
# # func1()
# # print(func1.__name__)
# # print(func1.__doc__)
# @wrapper
# def func1():
#     """
#     此函数是完成登陆的功能,参数分别是...作用。
#     :return: 返回值是登陆成功与否(True,False)
#     """
#     print(666)
#     return True
# func1()
# print(func1.__name__)
# print(func1.__doc__)

二、带参数的装饰器

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()

# import time
# flag = True
# 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

三、多个装饰器装饰一个函数

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()

# @wrapper2
# @wrapper3  #  f = wrapper2(f)  里面的f==inner1  外面的f == inner2
# @wrapper1  # f = wrapper1(f)   里面的f==函数名f  外面的f == inner1
# def f():  # 3
#     print('in f')
#
# f()  #

 

posted @ 2018-04-02 11:25  小杰~~  阅读(127)  评论(0编辑  收藏  举报