+ 装饰器
  1. 装饰器就是一个闭包.
  2. 在函数中再嵌套一个函数,并且引用外部函数的变量,就是一个闭包.
def outer(x):
    def inner(y):
        return x + y
    return inner
print(outer(6)(5))
不使用装饰器
使用装饰器
def func1():
    print("我是func1函数")
    value = (11,22,33,44)
    return value

result = func1()
print(result)

def func2():
    print("我是func2函数")
    value = (11,22,33,44)
    return value

result = func2()
print(result)

def func3():
    print("我是func3函数")
    value = (11,22,33,44)
    return value

result = func3()
print(result)
def outer(origin):
    def inner():
        print('before')
        res = origin()
        print('after')
        return res

    return inner

# @outer 类似于 func1 = outer(func1)
@outer
def func1():
    print("我是func1函数")
    value = (11, 22, 33, 44)
    return value

@outer
def func2():
    print("我是func2函数")
    value = (11, 22, 33, 44)
    return value

@outer
def func3():
    print("我是func3函数")
    value = (11, 22, 33, 44)
    return value

func1()
func2()
func3()

代码示例

装饰器直接写法
装饰器语法糖写法
import time

def count_time(func):
    def wrapper(*args, **kwargs):
        t1 = time.time()
        func(*args, **kwargs)
        print(func.__name__, time.time() - t1)
    return wrapper

def baiyu():
    print('baiyu')
    time.sleep(2)

if __name__ == '__main__':
    baiyu = count_time(baiyu)
    baiyu()
# Output:
# baiyu
# baiyu 2.000133752822876
import time

def count_time(func):
    def wrapper(*args, **kwargs):
        t1 = time.time()
        func(*args, **kwargs)
        print(func.__name__, time.time() - t1)
    return wrapper

@count_time
def baiyu():
    print('baiyu')
    time.sleep(2)

if __name__ == '__main__':
    baiyu()
# Output:
# baiyu
# baiyu 2.000133752822876
+ 在线测试