1. 程式人生 > 其它 >python裝飾器帶引數和方法帶引數的處理

python裝飾器帶引數和方法帶引數的處理

閒話少說~~~

from CustomLogger import mylog
from time import sleep, time
import functools

"""
    裝飾器帶引數和方法帶引數實現,統計方法執行時間
"""

log =mylog().get_log()

list={}
doc = {}
def setup(name):
    """setup"""
    def opp(func):
        """opp"""
        @functools.wraps(func)  # 不加該裝飾器,funcA.__doc__ == op 。加了後 funcA才顯示本身的doc屬性
        def op(*args, **kwargs):
            """op"""
            testName=name
            log.info("Test Item :[%s] Begin" % testName)
            starttime=time()

            func(*args, **kwargs)

            endtime=time()
            timeuse=endtime-starttime
            log.info("用時:%s" % int(timeuse))
            list[func.__name__] = int(timeuse)
            doc[func.__doc__] = func.__doc__

        return op
    return opp


@setup('測試A')
def funcA(a,b):
    """this A"""
    log.info('這是方法A裡面的操作')
    sleep(1)
    print('end')
    print(a+b)


@setup("測試B")
def funcB(a):
    """this B"""
    log.info('這是方法B裡面的操作')
    sleep(2)
    print('end')
    print(a)

funcA(4,5)
funcB("hi")
log.info(list)
log.info(doc)
print(funcA.__doc__)