高阶函数尝试装饰器
1.函数的参数是一个函数名 (难以保证被调用函数的调用方式不被修改 就比如下面第二个代码块)
2.函数的返回值是一个函数名
3.满足以上任何一个条件都可以称之为高阶函数
def foo(): print('from the foo') def test(func): #test的参数是foo(一个函数名) 因此test是一个高阶函数 但是foo不是一个高阶函数 return func
test(foo)
#对上述函数进行foo运行的时间统计
def test(func): print(func) start_time=time.time() func() stop_time = time.time() print('函数运行时间是 %s' % (stop_time-start_time)) # foo() #本来应该用这种方式调用foo test(foo) #更改了foo函数的调用方式
def foo(): time.sleep(3) print("你好阿龙氏夫妇") def cat(func): start_time = time.time() func() #第一次执行 end_time = time.time() print("函数的运行时间是%s" %(start_time-end_time)) return func foo = cat(foo) #运用高阶函数的两个原则 参数是函数名 而且返回值是函数名 foo() #第二次执行
你好阿龙氏夫妇 #由此可以看到foo执行了两次 肯定不能这么使用 所以高阶函数满足不了装饰器的运用
函数的运行时间是-3.000171661376953
你好阿龙氏夫妇