D20-02装饰器基本理论 03高阶函数

装饰器:本质就是函数,修饰其他函数(为其他函数添加附加功能)

原则:

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

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

记录代码运行时间,不重要。

import time
def cal(l):
    start_time=time.time() #因为要记录函数的运行时间所以把开始节点放在这里
    time.sleep(1)
    res = 0
    for i in l:
        res+=i
    stop_time=time.time()  #不能放在return下面,那样stop_time不会执行
    print('函数运行时间是%s'%(start_time-stop_time))
    return res
print(cal(range(100)))
输出结果:
函数运行时间是-1.000183343887329
4950

  

装饰器只是储备:

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

 

高阶函数

1、函数接受的参数是一个函数名

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

3、满足上述任意一个都可称之为高阶函数

 

第一种情况,接收的是函数名

def foo():
    print('你好')

def test(func):
    print(func) #此步骤中返回值为内存地址
    func() #加()可直接执行 即执行foo
test(foo)
打印结果
‘你好’ 

  

第二种情况 返回值是函数名

但以下代码多打印一次

def timmer(func):
    start_time=time.time()
    func()
    stop_time=time.time()
    print('函数的运行时间是%s'%(stop_time-start_time))
    return func
foo = timmer(foo)
foo()
输出结果

from foo
函数的运行时间是1.0006461143493652
from foo

  

 

posted @ 2018-09-05 15:32  犀利的攻城狮  阅读(114)  评论(0)    收藏  举报