1.不带参数

import time
def showtime(func):
    def wrapper():
        start_time = time.time()
        func()
        end_time = time.time()
        print('spend is {}'.format(end_time - start_time))

    return wrapper

@showtime  #foo = showtime(foo)
def test1():
    print('test1..')
    time.sleep(3)

@showtime #doo = showtime(doo)
def test2():
    print('test2..')
    time.sleep(2)

test1()
test2()

2.带参数

import time
def showtime(func):
    def wrapper(*xargs, **kwargs):
        start_time = time.time()
        func(*xargs, **kwargs)
        end_time = time.time()
        print('spend is {}'.format(end_time - start_time))

    return wrapper

@showtime #add = showtime(add)
def add(a, b):
    print(a+b)
    time.sleep(1)

@showtime #sub = showtime(sub)
def sub(a):
    print(a)
    time.sleep(1)

add(5,4)
sub(3)

  

3.装饰器带参数

import time
def showtime(test):
    def outwrapper(func):
        def wrapper(*xargs, **kwargs):
            start_time = time.time()
            func(*xargs, **kwargs)
            end_time = time.time()
            print(test)
            print('spend is {}'.format(end_time - start_time))

        return wrapper
    return  outwrapper

@showtime(test="hello") #add = showtime(add)
def add(a, b):
    print(a+b)
    time.sleep(1)

@showtime("nihao") #sub = showtime(sub)
def sub(a):
    print(a)
    time.sleep(1)

add(5,4)
sub(3)