装饰器(十五)

装饰器:本质就是函数,用来给其他函数增加 附加功能

原则:

1.不修改被修饰函数的源代码

2.不修改被修饰函数的调用方式

装饰器 = 高阶函数 +  函数嵌套 +闭包

高阶函数:

  1.函数的参数是一个函数名

  2.函数的返回值是一个函数名

  3.满足以上两个条件中的一个就是高阶函数

import time

def foo():
    time.sleep(2)

def test_swapper(func):
    time_start = time.time()
    func()
    time_end = time.time()
    print('函数执行时间:%s' %(time_end - time_start))

test_swapper(foo)  # 修改了函数的调用方式 foo()

'''
函数执行时间:2.0000498294830322
'''
import time

def foo():
    time.sleep(2)
    print('from foo...')

def test_swapper(func):
    time_start = time.time()
    func()
    time_end = time.time()
    print('函数执行时间:%s' %(time_end - time_start))
    return func

foo = test_swapper(foo)
foo()
'''
from foo...
函数执行时间:2.0009238719940186
from foo... # 多执行了一次
'''

以上说明高阶函数一个人满足不了装饰器的条件

函数嵌套

函数闭包

猜你喜欢

转载自www.cnblogs.com/xiangtingshen/p/10420073.html